#-------------------------------------------------------------------------------
# Author: Keith Brings
# Copyright (C) 2018 Noizu Labs, Inc. All rights reserved.
#-------------------------------------------------------------------------------
defmodule Noizu.RuleEngine.State.AgentStateManager do
@type t :: %__MODULE__{
agent: nil, # process
}
defstruct [
agent: nil,
]
def new(inner) do
{:ok, p} = Agent.start_link fn -> inner end
%__MODULE__{agent: p}
end
end
defimpl Noizu.RuleEngine.StateProtocol, for: Noizu.RuleEngine.State.AgentStateManager do
#-------------------------
#
#-------------------------
def settings(entry, context), do: Agent.get(entry.agent, &(Noizu.RuleEngine.StateProtocol.settings(&1, context)))
#-------------------------
#
#-------------------------
def setting(entry, setting, context), do: Agent.get(entry.agent, &(Noizu.RuleEngine.StateProtocol.setting(&1, setting, context)))
#-------------------------
#
#-------------------------
def put!(entry, field, value, context) do
Agent.update(entry.agent, &(Noizu.RuleEngine.StateProtocol.put!(&1, field, value, context)))
entry
end
#-------------------------
#
#-------------------------
def put!(entry, entity, field, value, context) do
Agent.update(entry.agent, &(Noizu.RuleEngine.StateProtocol.put!(&1, entity, field, value, context)))
entry
end
#-------------------------
#
#-------------------------
def get!(entry, field, context) do
{Agent.get(entry.agent, &(Noizu.RuleEngine.StateProtocol.get!(&1, field, context) |> elem(0) )), entry}
end
#-------------------------
#
#-------------------------
def get!(entry, entity, field, context) do
{Agent.get(entry.agent, &(Noizu.RuleEngine.StateProtocol.get!(&1, entity, field, context) |> elem(0) )), entry}
end
end