tag2upload_service_manager/
o2m_messages.rs1
2use crate::prelude::*;
3
4define_derive_deftly! {
5 Outcome:
6
7 impl Outcome {
8 pub fn job_status(&self) -> JobStatus {
9 match self { $(
10 $vtype($vname {}) => JobStatus::$vname,
11 ) }
12 }
13 }
14}
15
16#[derive(Deftly)]
17#[derive_deftly(MessageToOracle)]
18#[deftly(o2m(keyword = "t2u-manager-ready"))]
19pub struct Ready {}
20
21#[derive(Deftly)]
22#[derive_deftly(MessageFromOracle)]
23pub enum ClientGreeting {
24 Real(VersionRequest),
25 Local(local::Greeting),
26}
27
28#[derive(Deftly, Debug)]
29#[derive_deftly(MessageFromOracle)]
30#[deftly(o2m(keyword = "t2u-oracle-version"))]
31pub struct VersionRequest {
32 pub version: u32,
33}
34
35#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd)]
36#[derive(strum::FromRepr)]
37pub enum ProtocolVersion {
38 PV4 = 4, PV5 = 5,
41}
42impl UiDisplay for ProtocolVersion {
43 fn ui_display(&self) -> Cow<str> { (*self as isize).to_string().into() }
44}
45
46#[derive(Deftly, Debug)]
47#[derive_deftly(MessageFromOracle)]
48pub struct WorkerId {
49 pub worker: types::WorkerId,
50 pub fidelity: types::WorkerFidelity,
51}
52
53#[derive(Deftly, Debug)]
54#[derive_deftly(MessageFromOracle)]
55#[deftly(o2m(keyword = "worker-id"))]
56pub struct WorkerIdV2 {
57 pub worker: types::WorkerId,
58}
59
60#[derive(Deftly)]
61#[derive_deftly(MessageToOracle)]
62pub struct Ayt {}
63
64#[derive(Deftly)]
65#[derive_deftly(MessageFromOracle)]
66pub struct Ack {}
67
68#[derive(Deftly)]
69#[derive_deftly(MessageToOracle)]
70#[deftly(o2m(keyword = "restart-worker"))]
71pub struct RestartWorker {}
72
73#[derive(Deftly)]
74#[derive_deftly(MessageToOracle)]
75#[deftly(o2m(keyword = "job"))]
76pub struct JobV3 {
77 pub jid: JobId,
78 pub url: String,
79 #[deftly(o2m(data_blocks))]
80 pub body: TagObjectData,
81}
82
83#[derive(Deftly)]
84#[derive_deftly(MessageToOracle)]
85pub struct Job {
86 pub jid: JobId,
87 pub source: PackageName,
88 pub url: String,
89 #[deftly(o2m(data_blocks))]
90 pub body: TagObjectData,
91}
92
93#[derive(Deftly)]
94#[derive_deftly(MessageFromOracle)]
95pub struct Message {
96 #[deftly(o2m(rest_of_line))]
97 pub message: String,
98}
99
100#[derive(Deftly)]
101#[derive_deftly(MessageFromOracle)]
102pub struct Uploaded {}
103
104#[derive(Deftly)]
105#[derive_deftly(MessageFromOracle)]
106pub struct Irrecoverable {}
107
108#[derive(Deftly)]
109#[derive_deftly(MessageFromOracle, Outcome)]
110pub enum Outcome {
111 Uploaded(Uploaded),
112 Irrecoverable(Irrecoverable),
113}
114
115#[derive(Error, Debug)]
116#[derive(Deftly)]
117#[derive_deftly(MessageToOracle, MessageFromOracle)]
118#[deftly(o2m(infallible))]
119#[error("{message}")]
120pub struct ProtocolViolation {
121 #[deftly(o2m(rest_of_line))]
122 pub message: String,
123}
124
125pub mod local {
126 use super::*;
127
128 #[derive(Deftly, Debug)]
129 #[derive_deftly(MessageFromOracle)]
130 #[deftly(o2m(keyword = "t2u-local-client"))]
131 pub struct Greeting;
132
133 #[derive(Deftly, Debug)]
138 #[derive_deftly(MessageFromOracle)]
139 pub enum Insn {
140 Release(Release),
141 ShowRelease(ShowRelease),
142 UnreleaseAll(UnreleaseAll),
143 RestartWorkers(RestartWorkers),
144 }
145
146 #[derive(Deftly, Debug)]
147 #[derive_deftly(MessageFromOracle)]
148 pub struct Release {
149 pub fidelity: ReleaseFidelity,
150 pub jid: JobId,
151 }
152
153 #[derive(Deftly, Debug)]
154 #[derive_deftly(MessageFromOracle)]
155 pub struct ShowRelease {
156 }
157
158 #[derive(Deftly, Debug)]
159 #[derive_deftly(MessageFromOracle)]
160 pub struct UnreleaseAll {
161 }
162
163 #[derive(Deftly, Debug)]
164 #[derive_deftly(MessageFromOracle)]
165 pub struct RestartWorkers {
166 }
167
168 #[derive(Debug, Clone, Copy)]
169 pub enum ReleaseFidelity {
170 Unrelease,
171 Release(WorkerFidelity),
172 }
173 impl FromStr for ReleaseFidelity {
174 type Err = <WorkerFidelity as FromStr>::Err;
175 fn from_str(s: &str) -> Result<Self, Self::Err> {
176 Ok({
177 use ReleaseFidelity as L;
178 if s == "unrelease" { L::Unrelease }
179 else { L::Release(s.parse()?) }
180 })
181 }
182 }
183
184 #[derive(Deftly)]
185 #[derive_deftly(MessageToOracle)]
186 #[deftly(o2m(keyword = "ok"))]
187 pub struct OkResponse {
188 pub message: String,
189 }
190}