use crate::{
State, StateMachineImpl, StateMarker, StateStorage, StateTrait, StateUnionDiscriminant,
StateUnionErased, StateUnionSharedEffect, StateUnionTransition,
};
use core::marker::PhantomData;
#[doc(hidden)]
pub struct StateUnionTransitionProof<T, From, Marker, To>
where
T: StateMachineImpl,
From: StateTrait,
Marker: StateUnionDiscriminant,
To: StateTrait,
{
marker: PhantomData<fn() -> (T, From, Marker, To)>,
}
impl<T, From, Marker, To> StateUnionTransitionProof<T, From, Marker, To>
where
T: StateMachineImpl,
From: StateTrait,
Marker: StateUnionDiscriminant,
To: StateTrait,
{
#[doc(hidden)]
#[must_use]
pub fn new() -> Self {
Self {
marker: PhantomData,
}
}
#[doc(hidden)]
pub fn bind<Storage>(&self, _state: &State<Storage, T, From>)
where
Storage: StateStorage,
{
}
}
impl<T, From, Marker, To> Default for StateUnionTransitionProof<T, From, Marker, To>
where
T: StateMachineImpl,
From: StateTrait,
Marker: StateUnionDiscriminant,
To: StateTrait,
{
fn default() -> Self {
Self::new()
}
}
#[doc(hidden)]
pub trait UnionTransitionProof<T, TUnion, TTo>: StateMarker
where
T: StateMachineImpl,
TUnion: StateUnionDiscriminant,
TTo: crate::ConcreteStateTrait,
{
}
impl<T, From, TUnion, TTo> UnionTransitionProof<T, TUnion, TTo> for From
where
T: StateMachineImpl,
From: StateMarker + StateTrait + StateUnionErased<TUnion>,
TUnion: StateUnionDiscriminant
+ StateUnionTransition<T::Standin, TTo>
+ StateUnionSharedEffect<T, TTo>,
TTo: crate::ConcreteStateTrait,
{
}