Trait finny::FsmTransitionAction
source · [−]pub trait FsmTransitionAction<F: FsmBackend, E, TStateFrom, TStateTo> {
fn action<'a, Q: FsmEventQueue<F>>(
event: &E,
context: &mut EventContext<'a, F, Q>,
from: &mut TStateFrom,
to: &mut TStateTo
);
fn execute_transition<'a, 'b, 'c, 'd, Q: FsmEventQueue<F>, I, T>(
context: &'d mut DispatchContext<'a, 'b, 'c, F, Q, I, T>,
event: &E,
region: FsmRegionId,
inspect_event_ctx: &mut I
)
where
I: Inspect,
<F as FsmBackend>::States: FsmStateTransitionAsMut<TStateFrom, TStateTo>,
<F as FsmBackend>::States: AsMut<TStateFrom>,
<F as FsmBackend>::States: AsMut<TStateTo>,
TStateFrom: FsmState<F>,
TStateTo: FsmState<F>,
Self: Sized,
T: FsmTimers<F>,
{ ... }
fn execute_on_sub_entry<'a, 'b, 'c, 'd, Q, I, T>(
context: &'d mut DispatchContext<'a, 'b, 'c, F, Q, I, T>,
_region: FsmRegionId,
inspect_event_ctx: &mut I
) -> FsmDispatchResult
where
TStateTo: FsmBackend,
Q: FsmEventQueue<F>,
I: Inspect,
<F as FsmBackend>::Events: From<<TStateTo as FsmBackend>::Events>,
<F as FsmBackend>::States: AsMut<TStateTo>,
TStateTo: DerefMut<Target = FsmBackendImpl<TStateTo>>,
T: FsmTimers<F>,
<F as FsmBackend>::Timers: From<<TStateTo as FsmBackend>::Timers>,
{ ... }
}
Expand description
A transition’s action that operates on both the exit and entry states.
Required methods
fn action<'a, Q: FsmEventQueue<F>>(
event: &E,
context: &mut EventContext<'a, F, Q>,
from: &mut TStateFrom,
to: &mut TStateTo
)
fn action<'a, Q: FsmEventQueue<F>>(
event: &E,
context: &mut EventContext<'a, F, Q>,
from: &mut TStateFrom,
to: &mut TStateTo
)
This action is executed after the first state’s exit event, and just before the second event’s entry action. It can mutate both states.
Provided methods
fn execute_transition<'a, 'b, 'c, 'd, Q: FsmEventQueue<F>, I, T>(
context: &'d mut DispatchContext<'a, 'b, 'c, F, Q, I, T>,
event: &E,
region: FsmRegionId,
inspect_event_ctx: &mut I
) where
I: Inspect,
<F as FsmBackend>::States: FsmStateTransitionAsMut<TStateFrom, TStateTo>,
<F as FsmBackend>::States: AsMut<TStateFrom>,
<F as FsmBackend>::States: AsMut<TStateTo>,
TStateFrom: FsmState<F>,
TStateTo: FsmState<F>,
Self: Sized,
T: FsmTimers<F>,
fn execute_on_sub_entry<'a, 'b, 'c, 'd, Q, I, T>(
context: &'d mut DispatchContext<'a, 'b, 'c, F, Q, I, T>,
_region: FsmRegionId,
inspect_event_ctx: &mut I
) -> FsmDispatchResult where
TStateTo: FsmBackend,
Q: FsmEventQueue<F>,
I: Inspect,
<F as FsmBackend>::Events: From<<TStateTo as FsmBackend>::Events>,
<F as FsmBackend>::States: AsMut<TStateTo>,
TStateTo: DerefMut<Target = FsmBackendImpl<TStateTo>>,
T: FsmTimers<F>,
<F as FsmBackend>::Timers: From<<TStateTo as FsmBackend>::Timers>,
fn execute_on_sub_entry<'a, 'b, 'c, 'd, Q, I, T>(
context: &'d mut DispatchContext<'a, 'b, 'c, F, Q, I, T>,
_region: FsmRegionId,
inspect_event_ctx: &mut I
) -> FsmDispatchResult where
TStateTo: FsmBackend,
Q: FsmEventQueue<F>,
I: Inspect,
<F as FsmBackend>::Events: From<<TStateTo as FsmBackend>::Events>,
<F as FsmBackend>::States: AsMut<TStateTo>,
TStateTo: DerefMut<Target = FsmBackendImpl<TStateTo>>,
T: FsmTimers<F>,
<F as FsmBackend>::Timers: From<<TStateTo as FsmBackend>::Timers>,
Executed after the transition on the parent FSM (F) and triggers the first start()
call if necessary. Subsequent
dispatches are handled using the main dispatch table.