use rustfsm::{fsm, TransitionResult};
fsm! {
pub(super) name MutableSideEffectMachine; command MutableSideEffectCommand; error MutableSideEffectMachineError;
Created --(CheckExecutionState, on_check_execution_state) --> Replaying;
Created --(CheckExecutionState, on_check_execution_state) --> Executing;
Executing --(Schedule, on_schedule) --> MarkerCommandCreated;
Executing --(Schedule, on_schedule) --> Skipped;
MarkerCommandCreated --(CommandRecordMarker, on_command_record_marker) --> ResultNotified;
MarkerCommandCreatedReplaying --(CommandRecordMarker) --> ResultNotifiedReplaying;
Replaying --(Schedule, on_schedule) --> MarkerCommandCreatedReplaying;
ResultNotified --(MarkerRecorded, on_marker_recorded) --> MarkerCommandRecorded;
ResultNotifiedReplaying --(NonMatchingEvent, on_non_matching_event) --> SkippedNotified;
ResultNotifiedReplaying --(MarkerRecorded, on_marker_recorded) --> MarkerCommandRecorded;
ResultNotifiedReplaying --(MarkerRecorded, on_marker_recorded) --> SkippedNotified;
Skipped --(CommandRecordMarker, on_command_record_marker) --> SkippedNotified;
}
#[derive(thiserror::Error, Debug)]
pub(super) enum MutableSideEffectMachineError {}
pub(super) enum MutableSideEffectCommand {}
#[derive(Default, Clone)]
pub(super) struct Created {}
impl Created {
pub(super) fn on_check_execution_state(
self,
) -> MutableSideEffectMachineTransition<ReplayingOrExecuting> {
unimplemented!()
}
}
#[derive(Default, Clone)]
pub(super) struct Executing {}
impl Executing {
pub(super) fn on_schedule(
self,
) -> MutableSideEffectMachineTransition<MarkerCommandCreatedOrSkipped> {
unimplemented!()
}
}
#[derive(Default, Clone)]
pub(super) struct MarkerCommandCreated {}
impl MarkerCommandCreated {
pub(super) fn on_command_record_marker(
self,
) -> MutableSideEffectMachineTransition<ResultNotified> {
unimplemented!()
}
}
#[derive(Default, Clone)]
pub(super) struct MarkerCommandCreatedReplaying {}
#[derive(Default, Clone)]
pub(super) struct MarkerCommandRecorded {}
#[derive(Default, Clone)]
pub(super) struct Replaying {}
impl Replaying {
pub(super) fn on_schedule(
self,
) -> MutableSideEffectMachineTransition<MarkerCommandCreatedReplaying> {
unimplemented!()
}
}
#[derive(Default, Clone)]
pub(super) struct ResultNotified {}
impl ResultNotified {
pub(super) fn on_marker_recorded(
self,
) -> MutableSideEffectMachineTransition<MarkerCommandRecorded> {
unimplemented!()
}
}
#[derive(Default, Clone)]
pub(super) struct ResultNotifiedReplaying {}
impl ResultNotifiedReplaying {
pub(super) fn on_non_matching_event(
self,
) -> MutableSideEffectMachineTransition<SkippedNotified> {
unimplemented!()
}
pub(super) fn on_marker_recorded(
self,
) -> MutableSideEffectMachineTransition<MarkerCommandRecordedOrSkippedNotified> {
unimplemented!()
}
}
impl From<MarkerCommandCreatedReplaying> for ResultNotifiedReplaying {
fn from(_: MarkerCommandCreatedReplaying) -> Self {
Self::default()
}
}
#[derive(Default, Clone)]
pub(super) struct Skipped {}
impl Skipped {
pub(super) fn on_command_record_marker(
self,
) -> MutableSideEffectMachineTransition<SkippedNotified> {
unimplemented!()
}
}
#[derive(Default, Clone)]
pub(super) struct SkippedNotified {}