lib/finitomata/persistency/protocol.ex

defmodule Finitomata.Persistency.Protocol do
  @moduledoc """
  Default implementation of persistency adapter that does nothing but routes
    to the implementation of `Finitomata.Persistency.Persistable` for the data.
  """
  alias Finitomata.{Persistency, Persistency.Persistable}

  @behaviour Persistency

  @impl Persistency
  def load({module, fields}) do
    Persistable.load({module, fields})
  end

  def load(%_{} = data) do
    Persistable.load(data)
  end

  @impl Persistency
  def store(_id, %_{} = data, info) do
    Persistable.store(data, info)
  end

  @impl Persistency
  def store_error(_id, %_{} = data, reason, info) do
    Persistable.store_error(data, reason, info)
  end

  def idfy({:via, Registry, {Registry.Finitomata, name}}), do: name
  def idfy(name), do: name
end