ash_state_machine/lib/transformers/fill_in_event_defaults.ex
2023-04-22 18:39:29 -06:00

31 lines
821 B
Elixir

defmodule AshStateMachine.Transformers.FillInTransitionDefaults do
use Spark.Dsl.Transformer
alias Spark.Dsl.Transformer
@moduledoc false
def transform(dsl_state) do
initial_states = AshStateMachine.Info.state_machine_initial_states!(dsl_state)
transitions =
dsl_state
|> AshStateMachine.Info.state_machine_transitions()
all_states =
transitions
|> Enum.flat_map(fn transition ->
List.wrap(transition.from) ++ List.wrap(transition.to)
end)
|> Enum.concat(List.wrap(initial_states))
|> Enum.uniq()
dsl_state =
Transformer.set_option(
dsl_state,
[:state_machine],
:initial_states,
List.wrap(initial_states)
)
{:ok, Transformer.persist(dsl_state, :all_state_machine_states, all_states)}
end
end