stateforward-sml 1.2.0

sml.rs: a no-std Rust implementation of the sml.cpp transition-table DSL
Documentation
//! State data example
//!
//! An example of using state data together with an action.

#![deny(missing_docs)]

use sml::sml;

/// State data
#[derive(PartialEq)]
pub struct MyStateData(pub u32);

sml! {
    StatesWithData {
        *State1 + Event1 / action = State2,
        State2(MyStateData) + Event2 = State1,
        // ...
    }
}

/// Context
pub struct Context;

impl StatesWithDataStateMachineContext for Context {
    fn action(&mut self) -> Result<MyStateData, ()> {
        Ok(MyStateData(42))
    }
}

fn main() {
    let mut sm = StatesWithDataStateMachine::new(Context);
    let result = sm.process_event(StatesWithDataEvents::Event1);

    assert!(matches!(
        result,
        Ok(&StatesWithDataStates::State2(MyStateData(42)))
    ));
}