runbeam_sdk/runbeam_api/
resources.rs

1use serde::{Deserialize, Serialize};
2
3/// Paginated response wrapper
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct PaginatedResponse<T> {
6    pub data: Vec<T>,
7    pub links: PaginationLinks,
8    pub meta: PaginationMeta,
9}
10
11/// Pagination links
12#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct PaginationLinks {
14    pub first: Option<String>,
15    pub last: Option<String>,
16    pub prev: Option<String>,
17    pub next: Option<String>,
18}
19
20/// Pagination metadata
21#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct PaginationMeta {
23    pub current_page: u32,
24    pub from: Option<u32>,
25    pub last_page: u32,
26    pub path: Option<String>,
27    pub per_page: u32,
28    pub to: Option<u32>,
29    pub total: u32,
30}
31
32/// Single resource response wrapper
33#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct ResourceResponse<T> {
35    pub data: T,
36}
37
38/// Gateway resource
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct Gateway {
41    #[serde(rename = "type")]
42    pub resource_type: String,
43    #[serde(default)]
44    pub id: Option<String>,
45    pub code: String,
46    pub name: String,
47    pub team_id: String,
48    pub enabled: Option<bool>,
49    #[serde(default)]
50    pub pipelines_path: Option<String>,
51    #[serde(default)]
52    pub transforms_path: Option<String>,
53    #[serde(default)]
54    pub jwks_cache_duration_hours: Option<u32>,
55    #[serde(default)]
56    pub management_enabled: Option<bool>,
57    #[serde(default)]
58    pub management_base_path: Option<String>,
59    #[serde(default)]
60    pub management_network_id: Option<String>,
61    #[serde(default)]
62    pub dns: Option<Vec<String>>,
63    #[serde(default)]
64    pub settings: Option<serde_json::Value>,
65    #[serde(default)]
66    pub created_at: Option<String>,
67    #[serde(default)]
68    pub updated_at: Option<String>,
69}
70
71/// User who authorized a gateway
72#[derive(Debug, Clone, Serialize, Deserialize)]
73pub struct AuthorizedByInfo {
74    pub id: String,
75    pub name: String,
76    pub email: String,
77}
78
79/// Service resource
80#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct Service {
82    #[serde(rename = "type")]
83    pub resource_type: String,
84    #[serde(default)]
85    pub id: Option<String>,
86    pub code: String,
87    pub name: String,
88    pub team_id: String,
89    pub gateway_id: String,
90    #[serde(default)]
91    pub description: Option<String>,
92    #[serde(default)]
93    pub created_at: Option<String>,
94    #[serde(default)]
95    pub updated_at: Option<String>,
96}
97
98/// Endpoint resource
99#[derive(Debug, Clone, Serialize, Deserialize)]
100pub struct Endpoint {
101    #[serde(rename = "type")]
102    pub resource_type: String,
103    #[serde(default)]
104    pub id: Option<String>,
105    pub code: String,
106    pub name: String,
107    pub team_id: String,
108    pub gateway_id: Option<String>,
109    #[serde(default)]
110    pub service_id: Option<String>,
111    #[serde(default)]
112    pub path: Option<String>,
113    #[serde(default)]
114    pub methods: Option<Vec<String>>,
115    #[serde(default)]
116    pub description: Option<String>,
117    #[serde(default)]
118    pub created_at: Option<String>,
119    #[serde(default)]
120    pub updated_at: Option<String>,
121}
122
123/// Backend resource
124#[derive(Debug, Clone, Serialize, Deserialize)]
125pub struct Backend {
126    #[serde(rename = "type")]
127    pub resource_type: String,
128    #[serde(default)]
129    pub id: Option<String>,
130    pub code: String,
131    pub name: String,
132    pub team_id: String,
133    pub gateway_id: Option<String>,
134    #[serde(default)]
135    pub service_id: Option<String>,
136    #[serde(default)]
137    pub url: Option<String>,
138    #[serde(default)]
139    pub timeout_seconds: Option<u32>,
140    #[serde(default)]
141    pub created_at: Option<String>,
142    #[serde(default)]
143    pub updated_at: Option<String>,
144}
145
146/// Pipeline resource
147#[derive(Debug, Clone, Serialize, Deserialize)]
148pub struct Pipeline {
149    #[serde(rename = "type")]
150    pub resource_type: String,
151    #[serde(default)]
152    pub id: Option<String>,
153    pub code: String,
154    pub name: String,
155    pub description: String,
156    pub team_id: String,
157    pub gateway_id: Option<String>,
158    #[serde(default)]
159    pub networks: Option<Vec<String>>,
160    #[serde(default)]
161    pub endpoints: Option<serde_json::Value>,
162    #[serde(default)]
163    pub backends: Option<serde_json::Value>,
164    #[serde(default)]
165    pub middleware: Option<serde_json::Value>,
166    #[serde(default)]
167    pub created_at: Option<String>,
168    #[serde(default)]
169    pub updated_at: Option<String>,
170}
171
172/// Middleware resource  
173#[derive(Debug, Clone, Serialize, Deserialize)]
174pub struct Middleware {
175    #[serde(rename = "type")]
176    pub resource_type: String,
177    #[serde(default)]
178    pub id: Option<String>,
179    pub code: String,
180    pub name: String,
181    pub team_id: String,
182    pub middleware_type: String,
183    #[serde(default)]
184    pub options: Option<serde_json::Value>,
185    #[serde(default)]
186    pub created_at: Option<String>,
187    #[serde(default)]
188    pub updated_at: Option<String>,
189}
190
191/// Transform resource
192#[derive(Debug, Clone, Serialize, Deserialize)]
193pub struct Transform {
194    #[serde(rename = "type")]
195    pub resource_type: String,
196    #[serde(default)]
197    pub id: Option<String>,
198    pub code: String,
199    pub name: String,
200    pub team_id: String,
201    pub gateway_id: String,
202    #[serde(default)]
203    pub options: Option<TransformOptions>,
204    #[serde(default)]
205    pub created_at: Option<String>,
206    #[serde(default)]
207    pub updated_at: Option<String>,
208}
209
210/// Transform options
211#[derive(Debug, Clone, Serialize, Deserialize)]
212pub struct TransformOptions {
213    pub instructions: Option<String>,
214}
215
216/// Policy resource
217#[derive(Debug, Clone, Serialize, Deserialize)]
218pub struct Policy {
219    #[serde(rename = "type")]
220    pub resource_type: String,
221    #[serde(default)]
222    pub id: Option<String>,
223    pub code: String,
224    pub name: String,
225    pub enabled: u32,
226    pub team_id: String,
227    pub gateway_id: String,
228    #[serde(default)]
229    pub rules: Option<serde_json::Value>,
230    #[serde(default)]
231    pub created_at: Option<String>,
232    #[serde(default)]
233    pub updated_at: Option<String>,
234}
235
236/// Network resource
237#[derive(Debug, Clone, Serialize, Deserialize)]
238pub struct Network {
239    #[serde(rename = "type")]
240    pub resource_type: String,
241    #[serde(default)]
242    pub id: Option<String>,
243    pub code: String,
244    pub name: String,
245    pub team_id: String,
246    pub gateway_id: Option<String>,
247    pub enable_wireguard: bool,
248    #[serde(default)]
249    pub interface: Option<String>,
250    #[serde(default)]
251    pub http: Option<HttpConfig>,
252    #[serde(default)]
253    pub created_at: Option<String>,
254    #[serde(default)]
255    pub updated_at: Option<String>,
256}
257
258/// HTTP configuration for network
259#[derive(Debug, Clone, Serialize, Deserialize)]
260pub struct HttpConfig {
261    pub bind_address: Option<String>,
262    pub bind_port: Option<u16>,
263}
264
265/// Authentication resource
266#[derive(Debug, Clone, Serialize, Deserialize)]
267pub struct Authentication {
268    #[serde(rename = "type")]
269    pub resource_type: String,
270    #[serde(default)]
271    pub id: Option<String>,
272    pub code: Option<String>,
273    pub name: String,
274    pub team_id: Option<String>,
275    pub gateway_id: Option<String>,
276    #[serde(default)]
277    pub options: Option<String>,
278    #[serde(default)]
279    pub created_at: Option<String>,
280    #[serde(default)]
281    pub updated_at: Option<String>,
282}
283
284/// Full gateway configuration (for downloading complete config)
285#[derive(Debug, Clone, Serialize, Deserialize)]
286pub struct GatewayConfiguration {
287    pub gateway: Gateway,
288    #[serde(default)]
289    pub services: Vec<Service>,
290    #[serde(default)]
291    pub endpoints: Vec<Endpoint>,
292    #[serde(default)]
293    pub backends: Vec<Backend>,
294    #[serde(default)]
295    pub pipelines: Vec<Pipeline>,
296    #[serde(default)]
297    pub middlewares: Vec<Middleware>,
298    #[serde(default)]
299    pub transforms: Vec<Transform>,
300    #[serde(default)]
301    pub policies: Vec<Policy>,
302    #[serde(default)]
303    pub networks: Vec<Network>,
304}
305
306/// Change resource for configuration change tracking
307#[derive(Debug, Clone, Serialize, Deserialize)]
308pub struct Change {
309    pub id: String,
310    #[serde(rename = "type")]
311    pub resource_type: String,
312    pub gateway_id: String,
313    pub status: String,
314    pub operation: String,
315    #[serde(rename = "resourceType")]
316    pub change_resource_type: String,
317    pub resource_id: String,
318    pub payload: serde_json::Value,
319    #[serde(default)]
320    pub error: Option<String>,
321    pub created_at: String,
322    pub updated_at: String,
323}
324
325/// Response from the base URL discovery endpoint
326#[derive(Debug, Clone, Serialize, Deserialize)]
327pub struct BaseUrlResponse {
328    pub base_url: String,
329}
330
331/// Request payload for acknowledging multiple changes
332#[derive(Debug, Clone, Serialize, Deserialize)]
333pub struct AcknowledgeChangesRequest {
334    pub change_ids: Vec<String>,
335}
336
337/// Request payload for reporting a failed change
338#[derive(Debug, Clone, Serialize, Deserialize)]
339pub struct ChangeFailedRequest {
340    pub error: String,
341    #[serde(skip_serializing_if = "Option::is_none")]
342    pub details: Option<Vec<String>>,
343}