defprotocol RulEx.DataBag do
@moduledoc """
Protocol controlling providing facts to RulEx evaluation functions.
## Examples
defimpl RulEx.DataBag, for: Keyword do
def get(kw, key, default \\\\ nil) do
Keyword.get(kw, key, default)
end
end
"""
@doc """
Given an term implementing the `RulEx.DataBag` behaviour, a key,
and an optional default value, yield back the value found in
the provided databag.
## Examples
iex> 10 = RulEx.DataBag.get(%{"x" => 10}, "x")
iex> 10 = RulEx.DataBag.get(%{"x" => 10}, "x", 11)
iex> 11 = RulEx.DataBag.get(%{"y" => 10}, "x", 11)
"""
@spec get(t, any) :: any
@spec get(t, any, any) :: any
def get(db, var, default \\ nil)
end
defimpl RulEx.DataBag, for: Map do
@spec get(RulEx.Databag.t(), any) :: any
@spec get(RulEx.Databag.t(), any, any) :: any
defdelegate get(map, var), to: Map
defdelegate get(map, var, default), to: Map
end