ochami_rs/pcs/transitions/
types.rs1use manta_backend_dispatcher::types::pcs::transitions::types::{
2 Location as FrontEndLocation, Operation as FrontEndOperation,
3 Transition as FrontEndTransition,
4};
5
6use serde::{Deserialize, Serialize};
7
8use crate::error::Error;
9
10#[derive(Debug, Serialize, Deserialize, Default)]
11pub struct Location {
12 pub xname: String,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 #[serde(rename = "deputyKey")]
15 pub deputy_key: Option<String>,
16}
17
18impl From<FrontEndLocation> for Location {
19 fn from(value: FrontEndLocation) -> Self {
20 Location {
21 xname: value.xname,
22 deputy_key: value.deputy_key,
23 }
24 }
25}
26impl Into<FrontEndLocation> for Location {
27 fn into(self) -> FrontEndLocation {
28 FrontEndLocation {
29 xname: self.xname,
30 deputy_key: self.deputy_key,
31 }
32 }
33}
34
35#[derive(Debug, Serialize, Deserialize)]
37pub enum Operation {
38 #[serde(rename = "On")]
39 On,
40 #[serde(rename = "Off")]
41 Off,
42 #[serde(rename = "Soft-Off")]
43 SoftOff,
44 #[serde(rename = "Soft-Restart")]
45 SoftRestart,
46 #[serde(rename = "Hard-Restart")]
47 HardRestart,
48 #[serde(rename = "Init")]
49 Init,
50 #[serde(rename = "Force-Off")]
51 ForceOff,
52}
53
54impl Operation {
55 pub fn from_str(operation: &str) -> Result<Operation, Error> {
68 match operation {
69 "on" => Ok(Operation::On),
70 "off" => Ok(Operation::Off),
71 "soft-off" => Ok(Operation::SoftOff),
72 "soft-restart" => Ok(Operation::SoftRestart),
73 "hard-restart" => Ok(Operation::HardRestart),
74 "init" => Ok(Operation::Init),
75 "force-off" => Ok(Operation::ForceOff),
76 _ => Err(Error::Message("Operation not valid".to_string())),
77 }
78 }
79}
80
81impl From<FrontEndOperation> for Operation {
82 fn from(value: FrontEndOperation) -> Self {
83 match value {
84 FrontEndOperation::On => Operation::On,
85 FrontEndOperation::Off => Operation::Off,
86 FrontEndOperation::SoftOff => Operation::SoftOff,
87 FrontEndOperation::SoftRestart => Operation::SoftRestart,
88 FrontEndOperation::HardRestart => Operation::HardRestart,
89 FrontEndOperation::Init => Operation::Init,
90 FrontEndOperation::ForceOff => Operation::ForceOff,
91 }
92 }
93}
94impl Into<FrontEndOperation> for Operation {
95 fn into(self) -> FrontEndOperation {
96 match self {
97 Operation::On => FrontEndOperation::On,
98 Operation::Off => FrontEndOperation::Off,
99 Operation::SoftOff => FrontEndOperation::SoftOff,
100 Operation::SoftRestart => FrontEndOperation::SoftRestart,
101 Operation::HardRestart => FrontEndOperation::HardRestart,
102 Operation::Init => FrontEndOperation::Init,
103 Operation::ForceOff => FrontEndOperation::ForceOff,
104 }
105 }
106}
107
108#[derive(Debug, Serialize, Deserialize)]
117pub struct Transition {
118 pub operation: Operation,
119 #[serde(skip_serializing_if = "Option::is_none")]
120 #[serde(rename = "taskDeadlineMinutes")]
121 pub task_deadline_minutes: Option<usize>,
122 pub location: Vec<Location>,
123}
124
125impl From<FrontEndTransition> for Transition {
126 fn from(value: FrontEndTransition) -> Self {
127 Transition {
128 operation: Operation::from(value.operation),
129 task_deadline_minutes: value.task_deadline_minutes,
130 location: value
131 .location
132 .into_iter()
133 .map(|v| Location::from(v))
134 .collect(),
135 }
136 }
137}
138impl Into<FrontEndTransition> for Transition {
139 fn into(self) -> FrontEndTransition {
140 FrontEndTransition {
141 operation: self.operation.into(),
142 task_deadline_minutes: self.task_deadline_minutes,
143 location: self.location.into_iter().map(|v| v.into()).collect(),
144 }
145 }
146}