use super::TransitionPresentationInventory;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct MachinePresentation<
S: 'static,
T: 'static,
MachineMeta: 'static = (),
StateMeta: 'static = (),
TransitionMeta: 'static = (),
> {
pub machine: Option<MachinePresentationDescriptor<MachineMeta>>,
pub states: &'static [StatePresentation<S, StateMeta>],
pub transitions: TransitionPresentationInventory<T, TransitionMeta>,
}
impl<S, T, MachineMeta, StateMeta, TransitionMeta>
MachinePresentation<S, T, MachineMeta, StateMeta, TransitionMeta>
where
S: Copy + Eq + 'static,
T: Copy + Eq + 'static,
{
pub fn state(&self, id: S) -> Option<&StatePresentation<S, StateMeta>> {
self.states.iter().find(|state| state.id == id)
}
pub fn transition(&self, id: T) -> Option<&TransitionPresentation<T, TransitionMeta>> {
self.transitions
.iter()
.find(|transition| transition.id == id)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct MachinePresentationDescriptor<M: 'static = ()> {
pub label: Option<&'static str>,
pub description: Option<&'static str>,
pub metadata: M,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct StatePresentation<S: 'static, M: 'static = ()> {
pub id: S,
pub label: Option<&'static str>,
pub description: Option<&'static str>,
pub metadata: M,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct TransitionPresentation<T: 'static, M: 'static = ()> {
pub id: T,
pub label: Option<&'static str>,
pub description: Option<&'static str>,
pub metadata: M,
}