Current section
Files
Jump to
Current section
Files
lib/shared.ex
defmodule Modbus.Model.Shared do
@moduledoc false
alias Modbus.Model
def start_link(opts) do
model = Keyword.fetch!(opts, :model)
Agent.start_link(fn -> model end)
end
def stop(pid) do
Agent.stop(pid)
end
def state(pid) do
Agent.get(pid, fn model -> model end)
end
def apply(pid, cmd) do
Agent.get_and_update(pid, fn model ->
case Model.apply(model, cmd) do
{:ok, nmodel, values} ->
{{:ok, values}, nmodel}
{:ok, nmodel} ->
{:ok, nmodel}
{:error, nmodel} ->
{:error, nmodel}
end
end)
end
end