#![deny(missing_docs)]
use smlang::statemachine;
#[derive(PartialEq)]
pub struct MyEventData(pub u32);
statemachine! {
transitions: {
*State1 + Event1(&'a mut MyEventData) [guard] / action = State2,
}
}
pub struct Context;
impl StateMachineContext for Context {
fn guard(&self, event_data: &mut MyEventData) -> Result<bool, ()> {
event_data.0 = 55;
Ok(true)
}
fn action(&mut self, event_data: &mut MyEventData) -> Result<(), ()> {
println!("Got valid Event Data = {}", event_data.0);
Ok(())
}
}
fn main() {
let mut sm = StateMachine::new(Context);
let result = sm.process_event(Events::Event1(&mut MyEventData(42)));
assert!(matches!(result, Ok(&States::State2)));
}