1#![forbid(unsafe_code)]
4use crate::ssh::ExecutionOutput;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
11pub struct ExecutionJson {
12 pub stdout: String,
14 pub stderr: String,
16 pub exit_code: Option<i32>,
18 pub truncated_stdout: bool,
20 pub truncated_stderr: bool,
22 pub duration_ms: u64,
24}
25
26impl From<&ExecutionOutput> for ExecutionJson {
27 fn from(o: &ExecutionOutput) -> Self {
28 Self {
29 stdout: o.stdout.clone(),
30 stderr: o.stderr.clone(),
31 exit_code: o.exit_code,
32 truncated_stdout: o.truncated_stdout,
33 truncated_stderr: o.truncated_stderr,
34 duration_ms: o.duration_ms,
35 }
36 }
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
41pub struct HealthCheckJson {
42 pub name: String,
44 pub status: String,
46 pub latency_ms: u64,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
52pub struct HealthHostJson {
53 pub name: String,
55 pub status: String,
57 #[serde(skip_serializing_if = "Option::is_none")]
59 pub latency_ms: Option<u64>,
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub error: Option<String>,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
67pub struct HealthBatchJson {
68 pub event: String,
70 pub batch_run_id: String,
72 pub max_concurrency: u32,
74 pub results: Vec<HealthHostJson>,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
80pub struct ExecHostJson {
81 pub name: String,
83 pub ok: bool,
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub exit_code: Option<i32>,
88 pub stdout: String,
90 pub stderr: String,
92 pub duration_ms: u64,
94 #[serde(skip_serializing_if = "Option::is_none")]
96 pub error: Option<String>,
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
101pub struct ExecBatchJson {
102 pub event: String,
104 pub batch_run_id: String,
106 pub max_concurrency: u32,
108 pub results: Vec<ExecHostJson>,
110}
111
112#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
114pub struct ScpHostJson {
115 pub name: String,
117 pub ok: bool,
119 #[serde(skip_serializing_if = "Option::is_none")]
121 pub bytes: Option<u64>,
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub duration_ms: Option<u64>,
125 #[serde(skip_serializing_if = "Option::is_none")]
127 pub local: Option<String>,
128 #[serde(skip_serializing_if = "Option::is_none")]
130 pub error: Option<String>,
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
135pub struct ScpBatchJson {
136 pub event: String,
138 pub batch_run_id: String,
140 pub direction: String,
142 pub max_concurrency: u32,
144 pub results: Vec<ScpHostJson>,
146}
147
148#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
150pub struct ScpTransferJson {
151 pub ok: bool,
153 pub event: String,
155 pub direction: String,
157 pub vps: String,
159 pub local: String,
161 pub remote: String,
163 pub bytes: u64,
165 pub duration_ms: u64,
167}
168
169#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
171pub struct SftpTransferJson {
172 pub ok: bool,
174 pub event: String,
176 pub direction: String,
178 pub vps: String,
180 pub local: String,
182 pub remote: String,
184 pub bytes: u64,
186 pub duration_ms: u64,
188 #[serde(default, skip_serializing_if = "std::ops::Not::not")]
190 pub recursive: bool,
191}
192
193#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
195pub struct SftpListEntryJson {
196 pub name: String,
198 pub path: String,
200 pub kind: String,
202 #[serde(skip_serializing_if = "Option::is_none")]
204 pub size: Option<u64>,
205 #[serde(skip_serializing_if = "Option::is_none")]
207 pub mode: Option<u32>,
208}
209
210#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
212pub struct SftpListJson {
213 pub ok: bool,
215 pub event: String,
217 pub vps: String,
219 pub path: String,
221 pub entries: Vec<SftpListEntryJson>,
223}
224
225#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
227pub struct SftpFsOpJson {
228 pub ok: bool,
230 pub event: String,
232 pub op: String,
234 pub vps: String,
236 pub path: String,
238 #[serde(skip_serializing_if = "Option::is_none")]
240 pub to: Option<String>,
241 pub duration_ms: u64,
243 #[serde(skip_serializing_if = "Option::is_none")]
245 pub kind: Option<String>,
246 #[serde(skip_serializing_if = "Option::is_none")]
248 pub size: Option<u64>,
249 #[serde(skip_serializing_if = "Option::is_none")]
251 pub mode: Option<u32>,
252 #[serde(skip_serializing_if = "Option::is_none")]
254 pub mtime: Option<u32>,
255}
256
257#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
259pub struct SftpBatchJson {
260 pub event: String,
262 pub batch_run_id: String,
264 pub direction: String,
266 pub max_concurrency: u32,
268 pub results: Vec<ScpHostJson>,
270}
271
272#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
274pub struct TunnelListeningJson {
275 pub ok: bool,
277 pub event: String,
279 pub vps: String,
281 pub local_port: u16,
283 pub remote_host: String,
285 pub remote_port: u16,
287 pub timeout_ms: u64,
289}