1use std::fmt;
5
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize, schemars::JsonSchema)]
10#[serde(rename_all = "snake_case")]
11#[non_exhaustive]
12pub enum Op {
13 Up,
15 Down,
17 Park,
19 Resume,
21 Check,
23 Provision,
25}
26
27impl Op {
28 #[must_use]
30 pub fn as_str(self) -> &'static str {
31 match self {
32 Op::Up => "up",
33 Op::Down => "down",
34 Op::Park => "park",
35 Op::Resume => "resume",
36 Op::Check => "check",
37 Op::Provision => "provision",
38 }
39 }
40
41 pub(crate) fn during(self) -> Option<RunState> {
43 match self {
44 Op::Up => Some(RunState::Starting),
45 Op::Down => Some(RunState::Stopping),
46 Op::Park => Some(RunState::Parking),
47 Op::Resume => Some(RunState::Resuming),
48 Op::Check | Op::Provision => None,
49 }
50 }
51}
52
53impl fmt::Display for Op {
54 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
55 f.write_str(self.as_str())
56 }
57}
58
59#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, schemars::JsonSchema)]
61#[serde(rename_all = "snake_case")]
62#[non_exhaustive]
63pub enum RunState {
64 Starting,
66 Ready,
68 Failed,
70 Parking,
72 Parked,
74 Resuming,
76 Stopping,
78 Absent,
80}
81
82impl RunState {
83 #[must_use]
85 pub fn as_str(self) -> &'static str {
86 match self {
87 RunState::Starting => "starting",
88 RunState::Ready => "ready",
89 RunState::Failed => "failed",
90 RunState::Parking => "parking",
91 RunState::Parked => "parked",
92 RunState::Resuming => "resuming",
93 RunState::Stopping => "stopping",
94 RunState::Absent => "absent",
95 }
96 }
97}
98
99impl fmt::Display for RunState {
100 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
101 f.write_str(self.as_str())
102 }
103}
104
105#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
107#[serde(rename_all = "snake_case")]
108#[non_exhaustive]
109pub enum Park {
110 Pause,
112 Shutdown,
114}
115
116impl Park {
117 #[must_use]
119 pub fn as_str(self) -> &'static str {
120 match self {
121 Park::Pause => "pause",
122 Park::Shutdown => "shutdown",
123 }
124 }
125}
126
127impl fmt::Display for Park {
128 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
129 f.write_str(self.as_str())
130 }
131}