1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct PaginatedResponse<T> {
6 pub data: Vec<T>,
7 #[serde(default)]
8 pub links: Option<PaginationLinks>,
9 #[serde(default)]
10 pub meta: Option<PaginationMeta>,
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct PaginationLinks {
16 pub first: Option<String>,
17 pub last: Option<String>,
18 pub prev: Option<String>,
19 pub next: Option<String>,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct PaginationMeta {
25 pub current_page: u32,
26 pub from: Option<u32>,
27 pub last_page: u32,
28 #[serde(default)]
29 pub links: Option<Vec<serde_json::Value>>, pub path: Option<String>,
31 pub per_page: u32,
32 pub to: Option<u32>,
33 pub total: u32,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct ResourceResponse<T> {
39 pub data: T,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct Gateway {
45 #[serde(rename = "type")]
46 pub resource_type: String,
47 #[serde(default)]
48 pub id: Option<String>,
49 pub code: String,
50 pub name: String,
51 pub team_id: String,
52 pub enabled: Option<bool>,
53 #[serde(default)]
54 pub pipelines_path: Option<String>,
55 #[serde(default)]
56 pub transforms_path: Option<String>,
57 #[serde(default)]
58 pub jwks_cache_duration_hours: Option<u32>,
59 #[serde(default)]
60 pub management_enabled: Option<bool>,
61 #[serde(default)]
62 pub management_base_path: Option<String>,
63 #[serde(default)]
64 pub management_network_id: Option<String>,
65 #[serde(default)]
66 pub dns: Option<Vec<String>>,
67 #[serde(default)]
68 pub settings: Option<serde_json::Value>,
69 #[serde(default)]
70 pub created_at: Option<String>,
71 #[serde(default)]
72 pub updated_at: Option<String>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct AuthorizedByInfo {
78 pub id: String,
79 pub name: String,
80 pub email: String,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
85pub struct Service {
86 #[serde(rename = "type")]
87 pub resource_type: String,
88 #[serde(default)]
89 pub id: Option<String>,
90 pub code: String,
91 pub name: String,
92 pub team_id: String,
93 pub gateway_id: String,
94 #[serde(default)]
95 pub description: Option<String>,
96 #[serde(default)]
97 pub created_at: Option<String>,
98 #[serde(default)]
99 pub updated_at: Option<String>,
100}
101
102#[derive(Debug, Clone, Serialize, Deserialize)]
104pub struct Endpoint {
105 #[serde(rename = "type")]
106 pub resource_type: String,
107 #[serde(default)]
108 pub id: Option<String>,
109 pub code: String,
110 pub name: String,
111 pub team_id: String,
112 pub gateway_id: Option<String>,
113 #[serde(default)]
114 pub service_id: Option<String>,
115 #[serde(default)]
116 pub path: Option<String>,
117 #[serde(default)]
118 pub methods: Option<Vec<String>>,
119 #[serde(default)]
120 pub description: Option<String>,
121 #[serde(default)]
122 pub created_at: Option<String>,
123 #[serde(default)]
124 pub updated_at: Option<String>,
125}
126
127#[derive(Debug, Clone, Serialize, Deserialize)]
129pub struct Backend {
130 #[serde(rename = "type")]
131 pub resource_type: String,
132 #[serde(default)]
133 pub id: Option<String>,
134 pub code: String,
135 pub name: String,
136 pub team_id: String,
137 pub gateway_id: Option<String>,
138 #[serde(default)]
139 pub service_id: Option<String>,
140 #[serde(default)]
141 pub url: Option<String>,
142 #[serde(default)]
143 pub timeout_seconds: Option<u32>,
144 #[serde(default)]
145 pub created_at: Option<String>,
146 #[serde(default)]
147 pub updated_at: Option<String>,
148}
149
150#[derive(Debug, Clone, Serialize, Deserialize)]
152pub struct Pipeline {
153 #[serde(rename = "type")]
154 pub resource_type: String,
155 #[serde(default)]
156 pub id: Option<String>,
157 pub code: String,
158 pub name: String,
159 pub description: String,
160 pub team_id: String,
161 pub gateway_id: Option<String>,
162 #[serde(default)]
163 pub networks: Option<Vec<String>>,
164 #[serde(default)]
165 pub endpoints: Option<serde_json::Value>,
166 #[serde(default)]
167 pub backends: Option<serde_json::Value>,
168 #[serde(default)]
169 pub middleware: Option<serde_json::Value>,
170 #[serde(default)]
171 pub created_at: Option<String>,
172 #[serde(default)]
173 pub updated_at: Option<String>,
174}
175
176#[derive(Debug, Clone, Serialize, Deserialize)]
178pub struct Middleware {
179 #[serde(rename = "type")]
180 pub resource_type: String,
181 #[serde(default)]
182 pub id: Option<String>,
183 pub code: String,
184 pub name: String,
185 pub team_id: String,
186 pub middleware_type: String,
187 #[serde(default)]
188 pub options: Option<serde_json::Value>,
189 #[serde(default)]
190 pub created_at: Option<String>,
191 #[serde(default)]
192 pub updated_at: Option<String>,
193}
194
195#[derive(Debug, Clone, Serialize, Deserialize)]
197pub struct Transform {
198 #[serde(rename = "type")]
199 pub resource_type: String,
200 #[serde(default)]
201 pub id: Option<String>,
202 pub code: String,
203 pub name: String,
204 pub team_id: String,
205 pub gateway_id: String,
206 #[serde(default)]
207 pub options: Option<TransformOptions>,
208 #[serde(default)]
209 pub created_at: Option<String>,
210 #[serde(default)]
211 pub updated_at: Option<String>,
212}
213
214#[derive(Debug, Clone, Serialize, Deserialize)]
216pub struct TransformOptions {
217 pub instructions: Option<String>,
218}
219
220#[derive(Debug, Clone, Serialize, Deserialize)]
222pub struct Policy {
223 #[serde(rename = "type")]
224 pub resource_type: String,
225 #[serde(default)]
226 pub id: Option<String>,
227 pub code: String,
228 pub name: String,
229 pub enabled: u32,
230 pub team_id: String,
231 pub gateway_id: String,
232 #[serde(default)]
233 pub rules: Option<serde_json::Value>,
234 #[serde(default)]
235 pub created_at: Option<String>,
236 #[serde(default)]
237 pub updated_at: Option<String>,
238}
239
240#[derive(Debug, Clone, Serialize, Deserialize)]
242pub struct Network {
243 #[serde(rename = "type")]
244 pub resource_type: String,
245 #[serde(default)]
246 pub id: Option<String>,
247 pub code: String,
248 pub name: String,
249 pub team_id: String,
250 pub gateway_id: Option<String>,
251 pub enable_wireguard: bool,
252 #[serde(default)]
253 pub interface: Option<String>,
254 #[serde(default, alias = "http")]
255 pub tcp_config: Option<TcpConfig>,
256 #[serde(default)]
257 pub created_at: Option<String>,
258 #[serde(default)]
259 pub updated_at: Option<String>,
260}
261
262#[derive(Debug, Clone, Serialize, Deserialize)]
264pub struct TcpConfig {
265 pub bind_address: Option<String>,
266 pub bind_port: Option<u16>,
267}
268
269#[derive(Debug, Clone, Serialize, Deserialize)]
271pub struct Runbeam {
272 #[serde(rename = "type")]
273 pub resource_type: String,
274 #[serde(default)]
275 pub id: Option<String>,
276 pub code: String,
277 pub name: String,
278 pub team_id: String,
279 pub gateway_id: Option<String>,
280 #[serde(default)]
281 pub enabled: Option<bool>,
282 #[serde(default)]
283 pub cloud_api_base_url: Option<String>,
284 #[serde(default)]
285 pub poll_interval_secs: Option<u32>,
286 #[serde(default)]
287 pub created_at: Option<String>,
288 #[serde(default)]
289 pub updated_at: Option<String>,
290}
291
292#[derive(Debug, Clone, Serialize, Deserialize)]
294pub struct Authentication {
295 #[serde(rename = "type")]
296 pub resource_type: String,
297 #[serde(default)]
298 pub id: Option<String>,
299 pub code: Option<String>,
300 pub name: String,
301 pub team_id: Option<String>,
302 pub gateway_id: Option<String>,
303 #[serde(default)]
304 pub options: Option<String>,
305 #[serde(default)]
306 pub created_at: Option<String>,
307 #[serde(default)]
308 pub updated_at: Option<String>,
309}
310
311#[derive(Debug, Clone, Serialize, Deserialize)]
313pub struct GatewayConfiguration {
314 pub gateway: Gateway,
315 #[serde(default)]
316 pub services: Vec<Service>,
317 #[serde(default)]
318 pub endpoints: Vec<Endpoint>,
319 #[serde(default)]
320 pub backends: Vec<Backend>,
321 #[serde(default)]
322 pub pipelines: Vec<Pipeline>,
323 #[serde(default)]
324 pub middlewares: Vec<Middleware>,
325 #[serde(default)]
326 pub transforms: Vec<Transform>,
327 #[serde(default)]
328 pub policies: Vec<Policy>,
329 #[serde(default)]
330 pub networks: Vec<Network>,
331 #[serde(default)]
332 pub runbeam: Option<Runbeam>,
333}
334
335#[derive(Debug, Clone, Serialize, Deserialize)]
346pub struct Change {
347 pub id: String,
348 #[serde(default)]
349 pub status: Option<String>,
350 #[serde(rename = "type")]
351 pub resource_type: String,
352 pub gateway_id: String,
353 #[serde(default)]
354 pub pipeline_id: Option<String>,
355 #[serde(default)]
357 pub toml_config: Option<String>,
358 #[serde(default)]
360 pub metadata: Option<serde_json::Value>,
361 pub created_at: String,
362 #[serde(default)]
363 pub acknowledged_at: Option<String>,
364 #[serde(default)]
365 pub applied_at: Option<String>,
366 #[serde(default)]
367 pub failed_at: Option<String>,
368 #[serde(default)]
369 pub error_message: Option<String>,
370 #[serde(default)]
371 pub error_details: Option<serde_json::Value>,
372}
373
374#[derive(Debug, Clone, Serialize, Deserialize)]
376pub struct BaseUrlResponse {
377 pub base_url: String,
379 #[serde(default)]
381 pub changes_path: Option<String>,
382 #[serde(default)]
384 pub full_url: Option<String>,
385}
386
387#[derive(Debug, Clone, Serialize, Deserialize)]
389pub struct AcknowledgeChangesRequest {
390 pub change_ids: Vec<String>,
391}
392
393#[derive(Debug, Clone, Serialize, Deserialize)]
395pub struct ChangeFailedRequest {
396 pub error: String,
397 #[serde(skip_serializing_if = "Option::is_none")]
398 pub details: Option<Vec<String>>,
399}
400
401#[derive(Debug, Clone, Serialize, Deserialize)]
403pub struct AcknowledgeChangesResponse {
404 pub acknowledged: Vec<String>,
405 pub failed: Vec<String>,
406}
407
408#[derive(Debug, Clone, Serialize, Deserialize)]
410pub struct ChangeStatusResponse {
411 pub success: bool,
412 pub message: String,
413}
414
415pub type ChangeAppliedResponse = ChangeStatusResponse;
417
418pub type ChangeFailedResponse = ChangeStatusResponse;