Behaviour contract for stepwise engines.
Engines must be deterministic under sync: true execution, enabling
reliable unit tests and debugging.
Summary
Callbacks
@callback checkpoint(Mobus.Stepwise.Types.runtime()) :: map()
@callback get_state(Mobus.Stepwise.Types.runtime()) :: Mobus.Stepwise.Projection.t() | map()
@callback handle_event( Mobus.Stepwise.Types.runtime(), Mobus.Stepwise.Types.event(), Mobus.Stepwise.Types.payload() ) :: {:ok, Mobus.Stepwise.Types.runtime()} | {:wait, Mobus.Stepwise.Types.runtime(), Mobus.Stepwise.Types.wait_cfg()} | {:error, Mobus.Stepwise.Types.reason(), Mobus.Stepwise.Types.runtime()}
@callback init(Mobus.Stepwise.Types.spec(), Mobus.Stepwise.Types.runtime_context()) :: {:ok, Mobus.Stepwise.Types.runtime()} | {:wait, Mobus.Stepwise.Types.runtime(), Mobus.Stepwise.Types.wait_cfg()} | {:error, Mobus.Stepwise.Types.reason()} | {:error, {:initial_entry_action_failed, Mobus.Stepwise.Types.reason(), Mobus.Stepwise.Types.runtime()}}
@callback restore( Mobus.Stepwise.Types.spec(), map(), Mobus.Stepwise.Types.runtime_context() ) :: {:ok, Mobus.Stepwise.Types.runtime()} | {:error, Mobus.Stepwise.Types.reason()}