#![deny(missing_docs)]
use smlang::statemachine;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GuardError {
Custom,
}
#[derive(PartialEq)]
pub struct MyEventData(pub u32);
#[derive(PartialEq)]
pub struct MyStateData(pub u32);
statemachine! {
transitions: {
*State1 + Event1(MyEventData) [guard1] / action1 = State2,
State2(MyStateData) + Event2 [guard2] / action2 = State3,
},
custom_error: true,
}
pub struct Context;
impl StateMachineContext for Context {
type Error = GuardError; fn guard1(&self, _event_data: &MyEventData) -> Result<bool, GuardError> {
Err(GuardError::Custom)
}
fn action1(&mut self, _event_data: MyEventData) -> Result<MyStateData, Self::Error> {
todo!()
}
fn guard2(&self, _state_data: &MyStateData) -> Result<bool, GuardError> {
todo!()
}
fn action2(&mut self, _state_data: &MyStateData) -> Result<(), Self::Error> {
todo!()
}
}
fn main() {
let mut sm = StateMachine::new(Context {});
let r = sm.process_event(Events::Event1(MyEventData(1)));
assert!(matches!(r, Err(Error::GuardFailed(GuardError::Custom))));
}