Current section
Files
Jump to
Current section
Files
lib/ecto/fsm/machine/state.ex
defprotocol Ecto.FSM.Machine.State do
@moduledoc """
Defines a protocol for get / set state name from a structure.
"""
@type name :: Ecto.FSM.State.name()
@doc """
Retrieve current state handlers from state object, return [Handler1,Handler2]
"""
@spec handlers(t) :: [Ecto.FSM.handler()]
def handlers(state)
@doc """
Retrieve current state name from state object
"""
@spec state_name(t) :: name()
def state_name(state)
@doc """
Set new state name
"""
@spec set_state_name(t, name) :: t
def set_state_name(state, name)
end
defimpl Ecto.FSM.Machine.State, for: Ecto.Changeset do
alias Ecto.Changeset
alias Ecto.FSM.Machine
alias Ecto.FSM.Schema
def handlers(%Changeset{data: data}), do: Machine.State.handlers(data)
def state_name(%Changeset{} = cs) do
Changeset.get_field(cs, Schema.State.field(cs))
end
def set_state_name(%Changeset{} = cs, name) when is_atom(name) do
Changeset.put_change(cs, Schema.State.field(cs), name)
end
end