ExFSM

Build Status

Simple Elixir library to define composable mealy FSM as function (not related at all with :gen_fsm, no state/process management).

defmodule Light do
use ExFSM
deftrans on({:off, _}, state), do: {:next_state, :off, state}
deftrans off({:on, _}, state), do: {:next_state, :on, state}
end
defmodule Light.State do
@enforced_keys [:state]
defstruct @enforced_keys
end
defimpl ExFSM.Machine.State, for: Light.State do
def state_name(state), do: state.state
def set_state_name(state, state_name), do: struct(state, state: state_name)
def handlers(_state), do: [Light]
end
{:next_state, %_{state: :off} = state} = ExFSM.Machine.event({:on, nil}, %Light{state: :off})
{:next_state, %_{state: :on} = state} = ExFSM.Machine.event({:off, nil}, %Light{state: :on})
{:error, :illegal_action} = ExFSM.Machine.event({:on, nil}, %Light{state: :on})

Usage

See in in code documentation

CONTRIBUTING

Hi, and thank you for wanting to contribute. Please refer to the centralized informations available at: https://github.com/kbrw\#contributing