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