Packages
finitomata
0.5.0
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/finitomata/hook.ex
defmodule Finitomata.Hook do
@moduledoc false
defmacro __before_compile__(_env) do
quote generated: true, location: :keep do
if :on_transition in @__impl_for__ do
@impl Finitomata
def on_transition(current, event, event_payload, state_payload) do
Logger.debug(
"[✓ ⇄] with: " <>
inspect(
current: current,
event: event,
event_payload: event_payload,
state: state_payload
)
)
case Finitomata.Transition.allowed(@__fsm__, current, event) do
[new_current] -> {:ok, new_current, state_payload}
[] -> {:error, {:undefined_transition, {current, event}}}
other -> {:error, {:ambiguous_transition, {current, event}, other}}
end
end
end
if :on_failure in @__impl_for__ do
@impl Finitomata
def on_failure(event, payload, state) do
Logger.warn("[✗ ⇄] " <> inspect(state: state, event: event, payload: payload))
end
end
if :on_enter in @__impl_for__ do
@impl Finitomata
def on_enter(entering, state) do
Logger.debug("[← ⇄] " <> inspect(state: state, entering: entering))
end
end
if :on_exit in @__impl_for__ do
@impl Finitomata
def on_exit(exiting, state) do
Logger.debug("[→ ⇄] " <> inspect(state: state, exiting: exiting))
end
end
if :on_terminate in @__impl_for__ do
@impl Finitomata
def on_terminate(state) do
Logger.info("[◉ ⇄] " <> inspect(state: state))
end
end
end
end
end