lib/errors/no_matching_event.ex

defmodule AshStateMachine.Errors.NoMatchingTransition do
  @moduledoc "Used when a state change occurs in an action with no matching transition"
  use Splode.Error,
    fields: [:action, :target, :old_state],
    class: :invalid

  def message(error) do
    cond do
      error.old_state && error.target ->
        """
        Attempted to change state from #{error.old_state} to #{error.target} in action #{error.action}, but no matching transition was configured.
        """

      error.old_state ->
        """
        Attempted to change state from #{error.old_state} in action #{error.action}, but no matching transition was configured.
        """

      true ->
        """
        Attempted to change state to #{inspect(error.target)} in action #{error.action}, but no matching transition was configured.
        """
    end
  end
end