Current section
Files
Jump to
Current section
Files
lib/genie.ex
defmodule Genie do
@moduledoc """
Contains all the functions that are needed to interface with the libray.
"""
defstruct [:store]
def init(store \\ Genie.RuleStore.Map.new()) do
%Genie{store: store}
end
defmacro add_rule(genie, do: block) do
Genie.RuleParser.parse(genie, block, __CALLER__)
end
def add_rule(%Genie{} = genie, opts, fun) when is_function(fun, 1) do
provides = Keyword.get(opts, :provides, [])
requires = Keyword.get(opts, :requires, [])
rule = %Genie.Rule{id: UUID.uuid4(), fun: fun, provides: provides, requires: requires}
%Genie{genie | store: Genie.RuleStore.insert(genie.store, rule)}
end
def solve_for(%Genie{} = genie, initial_facts \\ %{}, wanted) do
Genie.Solver.solve(genie, initial_facts, wanted)
end
end