#![deny(missing_docs)]
use sml::sml;
sml! {
Linear[states_attr: #[derive(Debug)]] {
*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));
}