nautilus_common/
component.rs
1use crate::enums::{ComponentState, ComponentTrigger};
17
18impl ComponentState {
19 #[rustfmt::skip]
20 pub fn transition(&mut self, trigger: &ComponentTrigger) -> anyhow::Result<Self> {
21 let new_state = match (&self, trigger) {
22 (Self::PreInitialized, ComponentTrigger::Initialize) => Self::Ready,
23 (Self::Ready, ComponentTrigger::Reset) => Self::Resetting,
24 (Self::Ready, ComponentTrigger::Start) => Self::Starting,
25 (Self::Ready, ComponentTrigger::Dispose) => Self::Disposing,
26 (Self::Resetting, ComponentTrigger::ResetCompleted) => Self::Ready,
27 (Self::Starting, ComponentTrigger::StartCompleted) => Self::Running,
28 (Self::Starting, ComponentTrigger::Stop) => Self::Stopping,
29 (Self::Starting, ComponentTrigger::Fault) => Self::Faulting,
30 (Self::Running, ComponentTrigger::Stop) => Self::Stopping,
31 (Self::Running, ComponentTrigger::Degrade) => Self::Degrading,
32 (Self::Running, ComponentTrigger::Fault) => Self::Faulting,
33 (Self::Resuming, ComponentTrigger::Stop) => Self::Stopping,
34 (Self::Resuming, ComponentTrigger::ResumeCompleted) => Self::Running,
35 (Self::Resuming, ComponentTrigger::Fault) => Self::Faulting,
36 (Self::Stopping, ComponentTrigger::StopCompleted) => Self::Stopped,
37 (Self::Stopping, ComponentTrigger::Fault) => Self::Faulting,
38 (Self::Stopped, ComponentTrigger::Reset) => Self::Resetting,
39 (Self::Stopped, ComponentTrigger::Resume) => Self::Resuming,
40 (Self::Stopped, ComponentTrigger::Dispose) => Self::Disposing,
41 (Self::Stopped, ComponentTrigger::Fault) => Self::Faulting,
42 (Self::Degrading, ComponentTrigger::DegradeCompleted) => Self::Degraded,
43 (Self::Degraded, ComponentTrigger::Resume) => Self::Resuming,
44 (Self::Degraded, ComponentTrigger::Stop) => Self::Stopping,
45 (Self::Degraded, ComponentTrigger::Fault) => Self::Faulting,
46 (Self::Disposing, ComponentTrigger::DisposeCompleted) => Self::Disposed,
47 (Self::Faulting, ComponentTrigger::FaultCompleted) => Self::Faulted,
48 _ => anyhow::bail!("Invalid state trigger {self} -> {trigger}"),
49 };
50 Ok(new_state)
51 }
52}