use std::fmt::Debug;
use thiserror::Error;
#[derive(Debug, Clone, Copy, Eq, PartialEq, Error)]
pub enum StateMachineBuildError<S, E>
where
S: Debug,
E: Debug,
{
#[error("initial state is not registered: {state:?}")]
InitialStateNotRegistered {
state: S,
},
#[error("final state is not registered: {state:?}")]
FinalStateNotRegistered {
state: S,
},
#[error("transition source is not registered: {source_state:?} --{event:?}--> {target:?}")]
TransitionSourceNotRegistered {
source_state: S,
event: E,
target: S,
},
#[error("transition target is not registered: {source_state:?} --{event:?}--> {target:?}")]
TransitionTargetNotRegistered {
source_state: S,
event: E,
target: S,
},
#[error(
"duplicate transition target: {source_state:?} --{event:?}--> \
{existing_target:?} conflicts with {new_target:?}"
)]
DuplicateTransition {
source_state: S,
event: E,
existing_target: S,
new_target: S,
},
}