#![deny(missing_docs)]
use smlang::statemachine;
statemachine! {
name: Linear,
derive_states: [Debug],
transitions: {
*State1 + Event1 = State2,
State2 + Event2 = State3,
},
}
pub struct Context;
impl LinearStateMachineContext for Context {}
fn main() {
let mut sm = LinearStateMachine::new(Context);
assert!(matches!(sm.state(), &LinearStates::State1));
let r = sm.process_event(LinearEvents::Event1);
assert!(matches!(r, Ok(&LinearStates::State2)));
let r = sm.process_event(LinearEvents::Event2);
assert!(matches!(r, Ok(&LinearStates::State3)));
let r = sm.process_event(LinearEvents::Event1);
assert!(matches!(r, Err(LinearError::InvalidEvent)));
assert!(matches!(sm.state(), &LinearStates::State3));
let r = sm.process_event(LinearEvents::Event2);
assert!(matches!(r, Err(LinearError::InvalidEvent)));
assert!(matches!(sm.state(), &LinearStates::State3));
}