rustbridge_core/
lifecycle.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
15#[serde(rename_all = "snake_case")]
16pub enum LifecycleState {
17 #[default]
19 Installed,
20 Starting,
22 Active,
24 Stopping,
26 Stopped,
28 Failed,
30}
31
32impl LifecycleState {
33 pub fn can_transition_to(&self, target: LifecycleState) -> bool {
35 use LifecycleState::*;
36 matches!(
37 (self, target),
38 (Installed, Starting)
40 | (Starting, Active)
41 | (Active, Stopping)
42 | (Stopping, Stopped)
43 | (Stopped, Starting)
45 | (Installed, Failed)
47 | (Starting, Failed)
48 | (Active, Failed)
49 | (Stopping, Failed)
50 )
51 }
52
53 pub fn can_handle_requests(&self) -> bool {
55 matches!(self, LifecycleState::Active)
56 }
57
58 pub fn is_terminal(&self) -> bool {
60 matches!(self, LifecycleState::Stopped | LifecycleState::Failed)
61 }
62
63 pub fn description(&self) -> &'static str {
65 match self {
66 LifecycleState::Installed => "Plugin is installed but not initialized",
67 LifecycleState::Starting => "Plugin is starting up",
68 LifecycleState::Active => "Plugin is active and ready",
69 LifecycleState::Stopping => "Plugin is shutting down",
70 LifecycleState::Stopped => "Plugin has stopped",
71 LifecycleState::Failed => "Plugin has failed",
72 }
73 }
74}
75
76impl std::fmt::Display for LifecycleState {
77 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
78 match self {
79 LifecycleState::Installed => write!(f, "Installed"),
80 LifecycleState::Starting => write!(f, "Starting"),
81 LifecycleState::Active => write!(f, "Active"),
82 LifecycleState::Stopping => write!(f, "Stopping"),
83 LifecycleState::Stopped => write!(f, "Stopped"),
84 LifecycleState::Failed => write!(f, "Failed"),
85 }
86 }
87}
88
89#[cfg(test)]
90#[path = "lifecycle/lifecycle_tests.rs"]
91mod lifecycle_tests;
92
93#[cfg(test)]
94#[path = "lifecycle/lifecycle_parameterized_tests.rs"]
95mod lifecycle_parameterized_tests;