Packages
finitomata
0.29.7
0.41.0
0.40.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.1
0.30.3
0.30.2
0.30.1
0.30.0
0.29.10
0.29.9
0.29.8
0.29.7
0.29.6
0.29.5
0.29.4
0.29.3
0.29.2
0.29.1
0.29.0
0.28.1
0.28.0
0.27.1
0.27.0
0.26.4
0.26.3
0.26.2
0.26.1
0.26.0
0.25.0
0.24.4
0.24.3
0.24.2
0.24.1
0.24.0
0.23.7
0.23.6
0.23.5
0.23.4
0.23.3
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.0
0.15.1
0.15.0
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.1
0.1.0
The FSM implementation generated from PlantUML textual representation.
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/fsm_template.eex
defmodule <%= inspect(@module) %> do
@moduledoc """
`Finitomata`-based implementation of …
"""
@fsm """
<%= String.trim(@fsm) %>
"""
<%= @use_clause %>
# State
@type t :: %{
__struct__: __MODULE__,
name: Finitomata.fsm_name()
}
defstruct name: nil
# Interface
@spec start_fsm(Finitomata.id(), Finitomata.fsm_name()) ::
DynamicSupervisor.on_start_child()
def start_fsm(id \\ nil, name),
do: Finitomata.start_fsm(id, name, __MODULE__, %__MODULE__{name: name})
# Implementation
<%= for %Finitomata.Transition{from: from, to: to, event: event} <- @transitions, from != :* do %>
<%= if to != :* or not @auto_terminate? do %>
@impl Finitomata
def on_transition(:<%= from %>, :<%= event %>, _event_payload, state) do
{:ok, :<%= to %>, state}
end
<% end %>
<% end %>
<%= if @timer? do %>
@impl Finitomata
def on_timer(_fsm_state, state) do
{:ok, state}
end
<% end %>
<%= if :on_enter in @to_implement do %>
@impl Finitomata
def on_enter(_fsm_state, _state) do
:ok
end
<% end %>
<%= if :on_exit in @to_implement do %>
@impl Finitomata
def on_exit(_fsm_state, _state) do
:ok
end
<% end %>
<%= if :on_failure in @to_implement do %>
@impl Finitomata
def on_failure(_event, _event_payload, _state) do
:ok
end
<% end %>
<%= if :on_terminate in @to_implement do %>
@impl Finitomata
def on_terminate(_state) do
:ok
end
<% end %>
end