use crate::{
core::event_engine::{EffectInvocation, Event, Transition},
lib::alloc::vec::Vec,
};
pub(crate) trait State: Clone + PartialEq {
type State: State;
type Invocation: EffectInvocation;
type Event: Event;
fn enter(&self) -> Option<Vec<Self::Invocation>>;
fn exit(&self) -> Option<Vec<Self::Invocation>>;
fn transition(
&self,
event: &<<Self as State>::Invocation as EffectInvocation>::Event,
) -> Option<Transition<Self::State, Self::Invocation>>;
fn transition_to(
&self,
state: Option<Self::State>,
invocations: Option<Vec<Self::Invocation>>,
) -> Transition<Self::State, Self::Invocation>;
}