Current section

Files

Jump to
squid_mesh lib squid_mesh runtime journal command_receipt.ex
Raw

lib/squid_mesh/runtime/journal/command_receipt.ex

defmodule SquidMesh.Runtime.Journal.CommandReceipt do
@moduledoc false
alias SquidMesh.Runtime.DispatchProtocol
alias SquidMesh.Runtime.DispatchProtocol.Entry
@doc false
@spec new(atom(), map(), DateTime.t()) :: {:ok, Entry.t()} | {:error, term()}
def new(signal_type, attrs, %DateTime{} = now) when is_atom(signal_type) and is_map(attrs) do
attrs =
%{
run_id: Map.fetch!(attrs, :run_id),
signal_type: signal_type,
payload: Map.get(attrs, :payload, %{}),
metadata: Map.get(attrs, :metadata, %{}),
occurred_at: now
}
|> maybe_put(:idempotency_key, Map.get(attrs, :idempotency_key))
|> maybe_put(:actor, Map.get(attrs, :actor))
|> maybe_put(:comment, Map.get(attrs, :comment))
DispatchProtocol.new_entry(:run_signal_received, attrs)
end
defp maybe_put(map, _key, nil), do: map
defp maybe_put(map, key, value), do: Map.put(map, key, value)
end