1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct ConnectionConfig {
10 #[serde(default)]
11 pub host: Option<String>,
12 #[serde(default)]
13 pub port: Option<u16>,
14 #[serde(default)]
15 pub protocol: Option<String>,
16 #[serde(default)]
17 pub base_path: Option<String>,
18}
19
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct PaginatedResponse<T> {
28 pub data: Vec<T>,
29 #[serde(default)]
30 pub links: Option<PaginationLinks>,
31 #[serde(default)]
32 pub meta: Option<PaginationMeta>,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct PaginationLinks {
38 pub first: Option<String>,
39 pub last: Option<String>,
40 pub prev: Option<String>,
41 pub next: Option<String>,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
46pub struct PaginationMeta {
47 pub current_page: u32,
48 pub from: Option<u32>,
49 pub last_page: u32,
50 #[serde(default)]
51 pub links: Option<Vec<serde_json::Value>>, pub path: Option<String>,
53 pub per_page: u32,
54 pub to: Option<u32>,
55 pub total: u32,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct ResourceResponse<T> {
61 pub data: T,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct Peer {
71 #[serde(rename = "type")]
72 pub resource_type: String,
73 #[serde(default)]
74 pub id: Option<String>,
75 pub code: String,
76 pub name: String,
77 pub team_id: String,
78 pub gateway_id: Option<String>,
79 #[serde(default)]
80 pub connection: Option<ConnectionConfig>,
81 #[serde(default)]
83 pub protocol: Option<String>,
84 #[serde(default)]
85 pub description: Option<String>,
86 #[serde(default)]
87 pub enabled: Option<bool>,
88 #[serde(default)]
90 pub authentication: Option<String>,
91 #[serde(default)]
92 pub tags: Option<Vec<String>>,
93 #[serde(default)]
94 pub timeout_secs: Option<u32>,
95 #[serde(default)]
96 pub max_retries: Option<u32>,
97 #[serde(default)]
98 pub created_at: Option<String>,
99 #[serde(default)]
100 pub updated_at: Option<String>,
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize)]
105pub struct Target {
106 #[serde(rename = "type")]
107 pub resource_type: String,
108 #[serde(default)]
109 pub id: Option<String>,
110 pub code: String,
111 pub name: String,
112 pub team_id: String,
113 pub gateway_id: Option<String>,
114 #[serde(default)]
115 pub connection: Option<ConnectionConfig>,
116 #[serde(default)]
118 pub protocol: Option<String>,
119 #[serde(default)]
120 pub description: Option<String>,
121 #[serde(default)]
122 pub enabled: Option<bool>,
123 #[serde(default)]
125 pub authentication: Option<String>,
126 #[serde(default)]
127 pub tags: Option<Vec<String>>,
128 #[serde(default)]
129 pub timeout_secs: Option<u32>,
130 #[serde(default)]
131 pub max_retries: Option<u32>,
132 #[serde(default)]
133 pub created_at: Option<String>,
134 #[serde(default)]
135 pub updated_at: Option<String>,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize)]
140pub struct Gateway {
141 #[serde(rename = "type")]
142 pub resource_type: String,
143 #[serde(default)]
144 pub id: Option<String>,
145 pub code: String,
146 pub name: String,
147 pub team_id: String,
148 pub enabled: Option<bool>,
149 #[serde(default)]
150 pub pipelines_path: Option<String>,
151 #[serde(default)]
152 pub transforms_path: Option<String>,
153 #[serde(default)]
154 pub jwks_cache_duration_hours: Option<u32>,
155 #[serde(default)]
156 pub management_enabled: Option<bool>,
157 #[serde(default)]
158 pub management_base_path: Option<String>,
159 #[serde(default)]
160 pub management_network_id: Option<String>,
161 #[serde(default)]
162 pub dns: Option<Vec<String>>,
163 #[serde(default)]
164 pub settings: Option<serde_json::Value>,
165 #[serde(default)]
166 pub created_at: Option<String>,
167 #[serde(default)]
168 pub updated_at: Option<String>,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize)]
173pub struct AuthorizedByInfo {
174 pub id: String,
175 pub name: String,
176 pub email: String,
177}
178
179#[derive(Debug, Clone, Serialize, Deserialize)]
181pub struct Service {
182 #[serde(rename = "type")]
183 pub resource_type: String,
184 #[serde(default)]
185 pub id: Option<String>,
186 pub code: String,
187 pub name: String,
188 pub team_id: String,
189 pub gateway_id: String,
190 #[serde(default)]
191 pub description: Option<String>,
192 #[serde(default)]
193 pub created_at: Option<String>,
194 #[serde(default)]
195 pub updated_at: Option<String>,
196}
197
198#[derive(Debug, Clone, Serialize, Deserialize)]
200pub struct Endpoint {
201 #[serde(rename = "type")]
202 pub resource_type: String,
203 #[serde(default)]
204 pub id: Option<String>,
205 pub code: String,
206 pub name: String,
207 pub team_id: String,
208 pub gateway_id: Option<String>,
209 #[serde(default)]
210 pub service_id: Option<String>,
211 #[serde(default)]
213 pub peer_ref: Option<String>,
214 #[serde(default)]
216 pub connection: Option<ConnectionConfig>,
217 #[serde(default)]
219 pub authentication: Option<String>,
220 #[serde(default)]
221 pub path: Option<String>,
222 #[serde(default)]
223 pub methods: Option<Vec<String>>,
224 #[serde(default)]
225 pub description: Option<String>,
226 #[serde(default)]
228 pub options: Option<serde_json::Value>,
229 #[serde(default)]
230 pub created_at: Option<String>,
231 #[serde(default)]
232 pub updated_at: Option<String>,
233}
234
235#[derive(Debug, Clone, Serialize, Deserialize)]
237pub struct Backend {
238 #[serde(rename = "type")]
239 pub resource_type: String,
240 #[serde(default)]
241 pub id: Option<String>,
242 pub code: String,
243 pub name: String,
244 pub team_id: String,
245 pub gateway_id: Option<String>,
246 #[serde(default)]
247 pub service_id: Option<String>,
248 #[serde(default)]
250 pub target_ref: Option<String>,
251 #[serde(default)]
253 pub connection: Option<ConnectionConfig>,
254 #[serde(default)]
256 pub authentication: Option<String>,
257 #[serde(default)]
258 pub url: Option<String>,
259 #[serde(default)]
260 pub timeout_seconds: Option<u32>,
261 #[serde(default)]
263 pub max_retries: Option<u32>,
264 #[serde(default)]
266 pub options: Option<serde_json::Value>,
267 #[serde(default)]
268 pub created_at: Option<String>,
269 #[serde(default)]
270 pub updated_at: Option<String>,
271}
272
273#[derive(Debug, Clone, Serialize, Deserialize)]
275pub struct Pipeline {
276 #[serde(rename = "type")]
277 pub resource_type: String,
278 #[serde(default)]
279 pub id: Option<String>,
280 pub code: String,
281 pub name: String,
282 pub description: String,
283 pub team_id: String,
284 pub gateway_id: Option<String>,
285 #[serde(default)]
286 pub networks: Option<Vec<String>>,
287 #[serde(default)]
288 pub endpoints: Option<serde_json::Value>,
289 #[serde(default)]
290 pub backends: Option<serde_json::Value>,
291 #[serde(default)]
292 pub middleware: Option<serde_json::Value>,
293 #[serde(default)]
294 pub created_at: Option<String>,
295 #[serde(default)]
296 pub updated_at: Option<String>,
297}
298
299#[derive(Debug, Clone, Serialize, Deserialize)]
301pub struct Middleware {
302 #[serde(rename = "type")]
303 pub resource_type: String,
304 #[serde(default)]
305 pub id: Option<String>,
306 pub code: String,
307 pub name: String,
308 pub team_id: String,
309 pub middleware_type: String,
310 #[serde(default)]
312 pub authentication: Option<String>,
313 #[serde(default)]
314 pub options: Option<serde_json::Value>,
315 #[serde(default)]
316 pub created_at: Option<String>,
317 #[serde(default)]
318 pub updated_at: Option<String>,
319}
320
321#[derive(Debug, Clone, Serialize, Deserialize)]
323pub struct Transform {
324 #[serde(rename = "type")]
325 pub resource_type: String,
326 #[serde(default)]
327 pub id: Option<String>,
328 pub code: String,
329 pub name: String,
330 pub team_id: String,
331 pub gateway_id: String,
332 #[serde(default)]
333 pub options: Option<TransformOptions>,
334 #[serde(default)]
335 pub created_at: Option<String>,
336 #[serde(default)]
337 pub updated_at: Option<String>,
338}
339
340#[derive(Debug, Clone, Serialize, Deserialize)]
342pub struct TransformOptions {
343 pub instructions: Option<String>,
344}
345
346#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
357pub struct PolicyRules(pub Vec<String>);
358
359impl PolicyRules {
360 pub fn new(rules: Vec<String>) -> Self {
362 PolicyRules(rules)
363 }
364
365 pub fn rules(&self) -> &[String] {
367 &self.0
368 }
369
370 pub fn into_inner(self) -> Vec<String> {
372 self.0
373 }
374}
375
376#[derive(Debug, Clone, Serialize, Deserialize)]
381pub struct Rule {
382 #[serde(rename = "type")]
383 pub resource_type: String,
384 pub id: String,
385 pub code: String,
386 #[serde(default)]
387 pub name: Option<String>,
388 pub rule_type: String,
389 pub team_id: String,
390 pub gateway_id: String,
391 #[serde(default)]
392 pub weight: Option<u32>,
393 #[serde(default)]
394 pub enabled: Option<bool>,
395 #[serde(default)]
396 pub options: Option<serde_json::Value>,
397 #[serde(default)]
398 pub created_at: Option<String>,
399 #[serde(default)]
400 pub updated_at: Option<String>,
401}
402
403#[derive(Debug, Clone, Serialize, Deserialize)]
430pub struct Policy {
431 #[serde(rename = "type")]
432 pub resource_type: String,
433 #[serde(default)]
434 pub id: Option<String>,
435 pub code: String,
436 pub name: String,
437 pub enabled: u32,
438 pub team_id: String,
439 pub gateway_id: String,
440 #[serde(default)]
446 pub rules: Option<PolicyRules>,
447 #[serde(default)]
448 pub created_at: Option<String>,
449 #[serde(default)]
450 pub updated_at: Option<String>,
451}
452
453#[derive(Debug, Clone, Serialize, Deserialize)]
455pub struct Network {
456 #[serde(rename = "type")]
457 pub resource_type: String,
458 #[serde(default)]
459 pub id: Option<String>,
460 pub code: String,
461 pub name: String,
462 pub team_id: String,
463 pub gateway_id: Option<String>,
464 pub enable_wireguard: bool,
465 #[serde(default)]
466 pub interface: Option<String>,
467 #[serde(default, alias = "http")]
468 pub tcp_config: Option<TcpConfig>,
469 #[serde(default)]
470 pub created_at: Option<String>,
471 #[serde(default)]
472 pub updated_at: Option<String>,
473}
474
475#[derive(Debug, Clone, Serialize, Deserialize)]
477pub struct TcpConfig {
478 pub bind_address: Option<String>,
479 pub bind_port: Option<u16>,
480}
481
482#[derive(Debug, Clone, Serialize, Deserialize)]
484pub struct Runbeam {
485 #[serde(rename = "type")]
486 pub resource_type: String,
487 #[serde(default)]
488 pub id: Option<String>,
489 pub code: String,
490 pub name: String,
491 pub team_id: String,
492 pub gateway_id: Option<String>,
493 #[serde(default)]
494 pub enabled: Option<bool>,
495 #[serde(default)]
496 pub cloud_api_base_url: Option<String>,
497 #[serde(default)]
498 pub poll_interval_secs: Option<u32>,
499 #[serde(default)]
500 pub created_at: Option<String>,
501 #[serde(default)]
502 pub updated_at: Option<String>,
503}
504
505#[derive(Debug, Clone, Serialize, Deserialize)]
507pub struct Authentication {
508 #[serde(rename = "type")]
509 pub resource_type: String,
510 #[serde(default)]
511 pub id: Option<String>,
512 pub code: Option<String>,
513 pub name: String,
514 pub team_id: Option<String>,
515 pub gateway_id: Option<String>,
516 pub method: String,
517 #[serde(default)]
518 pub options: Option<serde_json::Value>,
519 #[serde(default)]
520 pub created_at: Option<String>,
521 #[serde(default)]
522 pub updated_at: Option<String>,
523}
524
525#[derive(Debug, Clone, Serialize, Deserialize)]
527pub struct GatewayConfiguration {
528 pub gateway: Gateway,
529 #[serde(default)]
530 pub peers: Vec<Peer>,
531 #[serde(default)]
532 pub targets: Vec<Target>,
533 #[serde(default)]
534 pub services: Vec<Service>,
535 #[serde(default)]
536 pub endpoints: Vec<Endpoint>,
537 #[serde(default)]
538 pub backends: Vec<Backend>,
539 #[serde(default)]
540 pub pipelines: Vec<Pipeline>,
541 #[serde(default)]
542 pub middlewares: Vec<Middleware>,
543 #[serde(default)]
544 pub transforms: Vec<Transform>,
545 #[serde(default)]
546 pub policies: Vec<Policy>,
547 #[serde(default)]
548 pub rules: Vec<Rule>,
549 #[serde(default)]
550 pub networks: Vec<Network>,
551 #[serde(default)]
552 pub runbeam: Option<Runbeam>,
553 #[serde(default)]
554 pub authentications: Vec<Authentication>,
555}
556
557#[derive(Debug, Clone, Serialize, Deserialize)]
568pub struct Change {
569 pub id: String,
570 #[serde(default)]
571 pub status: Option<String>,
572 #[serde(rename = "type")]
573 pub resource_type: String,
574 pub gateway_id: String,
575 #[serde(default)]
576 pub pipeline_id: Option<String>,
577 #[serde(default)]
579 pub toml_config: Option<String>,
580 #[serde(default)]
582 pub metadata: Option<serde_json::Value>,
583 pub created_at: String,
584 #[serde(default)]
585 pub acknowledged_at: Option<String>,
586 #[serde(default)]
587 pub applied_at: Option<String>,
588 #[serde(default)]
589 pub failed_at: Option<String>,
590 #[serde(default)]
591 pub error_message: Option<String>,
592 #[serde(default)]
593 pub error_details: Option<serde_json::Value>,
594}
595
596#[derive(Debug, Clone, Serialize, Deserialize)]
598pub struct BaseUrlResponse {
599 pub base_url: String,
601 #[serde(default)]
603 pub changes_path: Option<String>,
604 #[serde(default)]
606 pub full_url: Option<String>,
607}
608
609#[derive(Debug, Clone, Serialize, Deserialize)]
611pub struct AcknowledgeChangesRequest {
612 pub change_ids: Vec<String>,
613}
614
615#[derive(Debug, Clone, Serialize, Deserialize)]
617pub struct ChangeFailedRequest {
618 pub error: String,
619 #[serde(skip_serializing_if = "Option::is_none")]
620 pub details: Option<Vec<String>>,
621}
622
623#[derive(Debug, Clone, Serialize, Deserialize)]
625pub struct AcknowledgeChangesResponse {
626 pub acknowledged: Vec<String>,
627 pub failed: Vec<String>,
628}
629
630#[derive(Debug, Clone, Serialize, Deserialize)]
632pub struct ChangeStatusResponse {
633 pub success: bool,
634 pub message: String,
635}
636
637pub type ChangeAppliedResponse = ChangeStatusResponse;
639
640pub type ChangeFailedResponse = ChangeStatusResponse;
642
643#[derive(Debug, Clone, Serialize, Deserialize)]
649pub struct MeshTokenRequest {
650 pub mesh_id: String,
652 pub destination_url: String,
654}
655
656#[derive(Debug, Clone, Serialize, Deserialize)]
658pub struct MeshTokenResponse {
659 pub token: String,
661 pub expires_at: String,
663 pub mesh_id: String,
665}