#![deny(missing_docs)]
use smlang::statemachine;
statemachine! {
name: Looping,
transitions: {
*State1 + Event1 = State2,
State2 + Event2 = State3,
State3 + Event3 = State2,
}
}
pub struct Context;
impl LoopingStateMachineContext for Context {}
fn main() {
let mut sm = LoopingStateMachine::new(Context);
assert!(matches!(sm.state(), &LoopingStates::State1));
let r = sm.process_event(LoopingEvents::Event1);
assert!(matches!(r, Ok(&LoopingStates::State2)));
let r = sm.process_event(LoopingEvents::Event2);
assert!(matches!(r, Ok(&LoopingStates::State3)));
let r = sm.process_event(LoopingEvents::Event3);
assert!(matches!(r, Ok(&LoopingStates::State2)));
let r = sm.process_event(LoopingEvents::Event2);
assert!(matches!(r, Ok(&LoopingStates::State3)));
let r = sm.process_event(LoopingEvents::Event3);
assert!(matches!(r, Ok(&LoopingStates::State2)));
let r = sm.process_event(LoopingEvents::Event1);
assert!(matches!(r, Err(LoopingError::InvalidEvent)));
assert!(matches!(sm.state(), &LoopingStates::State2));
}