Skip to main content

xbp_cli/provider_support/
models.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Serialize, Deserialize, Default)]
6pub struct PaginationInfo {
7    pub count: Option<u64>,
8    pub page: Option<u64>,
9    pub per_page: Option<u64>,
10    pub total_count: Option<u64>,
11    pub total_pages: Option<u64>,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct CloudflareEnvelope<T> {
16    pub success: bool,
17    #[serde(default)]
18    pub errors: Vec<CloudflareEnvelopeMessage>,
19    #[serde(default)]
20    pub messages: Vec<CloudflareEnvelopeMessage>,
21    pub result: T,
22    #[serde(default)]
23    pub result_info: Option<PaginationInfo>,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct CloudflareEnvelopeMessage {
28    pub code: Option<i64>,
29    pub message: Option<String>,
30    #[serde(default)]
31    pub documentation_url: Option<String>,
32    #[serde(default)]
33    pub source: Option<Value>,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct ProviderErrorResponse {
38    pub provider: String,
39    pub message: String,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct SecretsStore {
44    pub id: String,
45    pub created: String,
46    pub modified: String,
47    pub name: String,
48    #[serde(default)]
49    pub account_id: Option<String>,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
53#[serde(rename_all = "snake_case")]
54pub enum SecretStatus {
55    Pending,
56    Active,
57    Deleted,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct SecretRecord {
62    pub id: String,
63    pub created: String,
64    pub modified: String,
65    pub name: String,
66    pub status: SecretStatus,
67    pub store_id: String,
68    #[serde(default)]
69    pub comment: Option<String>,
70    #[serde(default)]
71    pub scopes: Option<Vec<String>>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize)]
75pub struct SecretsQuotaUsage {
76    pub quota: u64,
77    pub usage: u64,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct SecretsQuota {
82    pub secrets: SecretsQuotaUsage,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
86pub struct CloudflareWorkerSecret {
87    pub name: String,
88    #[serde(rename = "type")]
89    pub secret_type: String,
90    #[serde(default)]
91    pub text: Option<String>,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize, Default)]
95pub struct CloudflareWorkerRoute {
96    #[serde(default)]
97    pub pattern: Option<String>,
98    #[serde(default)]
99    pub script: Option<String>,
100}
101
102#[derive(Debug, Clone, Serialize, Deserialize, Default)]
103pub struct CloudflareWorkerScript {
104    #[serde(alias = "name")]
105    pub id: String,
106    #[serde(default)]
107    pub tag: Option<String>,
108    #[serde(default)]
109    pub created_on: Option<String>,
110    #[serde(default)]
111    pub modified_on: Option<String>,
112    #[serde(default)]
113    pub usage_model: Option<String>,
114    #[serde(default)]
115    pub placement_status: Option<String>,
116    #[serde(default)]
117    pub last_deployed_from: Option<String>,
118    #[serde(default)]
119    pub routes: Option<Vec<CloudflareWorkerRoute>>,
120}
121
122#[derive(Debug, Clone, Serialize, Deserialize)]
123pub struct CloudflareWorkerBuild {
124    pub build_uuid: String,
125    #[serde(default)]
126    pub status: Option<String>,
127    #[serde(default)]
128    pub branch: Option<String>,
129    #[serde(default)]
130    pub created_at: Option<String>,
131    #[serde(flatten, default)]
132    pub extra: HashMap<String, Value>,
133}
134
135#[derive(Debug, Clone, Serialize, Deserialize, Default)]
136pub struct CloudflareWorkerSettings {
137    #[serde(default)]
138    pub annotations: Option<Value>,
139    #[serde(default)]
140    pub bindings: Vec<Value>,
141    #[serde(default)]
142    pub compatibility_date: Option<String>,
143    #[serde(default)]
144    pub compatibility_flags: Option<Vec<String>>,
145    #[serde(default)]
146    pub keep_assets: Option<bool>,
147    #[serde(default)]
148    pub keep_bindings: Option<Vec<String>>,
149    #[serde(default)]
150    pub keep_vars: Option<bool>,
151    #[serde(default)]
152    pub logpush: Option<bool>,
153    #[serde(default)]
154    pub observability: Option<Value>,
155    #[serde(default)]
156    pub placement: Option<Value>,
157    #[serde(default)]
158    pub preview_urls: Option<bool>,
159    #[serde(default)]
160    pub tail_consumers: Option<Vec<Value>>,
161    #[serde(default)]
162    pub usage_model: Option<String>,
163    #[serde(default)]
164    pub workers_dev: Option<bool>,
165    #[serde(default)]
166    pub routes: Vec<Value>,
167}
168
169#[derive(Debug, Clone, Serialize, Deserialize, Default)]
170pub struct CloudflareDurableObjectNamespace {
171    pub id: String,
172    pub name: String,
173    #[serde(default)]
174    pub script: Option<String>,
175    #[serde(default)]
176    pub class: Option<String>,
177    #[serde(default)]
178    pub use_sqlite: bool,
179    #[serde(default)]
180    pub use_containers: bool,
181    #[serde(flatten, default)]
182    pub extra: HashMap<String, Value>,
183}
184
185#[derive(Debug, Clone, Serialize, Deserialize)]
186pub struct CloudflareAccountRef {
187    #[serde(default)]
188    pub id: Option<String>,
189    #[serde(default)]
190    pub name: Option<String>,
191}
192
193#[derive(Debug, Clone, Serialize, Deserialize)]
194pub struct CloudflareOwnerRef {
195    #[serde(default)]
196    pub id: Option<String>,
197    #[serde(default)]
198    pub name: Option<String>,
199    #[serde(default)]
200    pub r#type: Option<String>,
201}
202
203#[derive(Debug, Clone, Serialize, Deserialize)]
204pub struct CloudflareTenantRef {
205    #[serde(default)]
206    pub id: Option<String>,
207    #[serde(default)]
208    pub name: Option<String>,
209}
210
211#[derive(Debug, Clone, Serialize, Deserialize)]
212pub struct CloudflareTenantUnitRef {
213    #[serde(default)]
214    pub id: Option<String>,
215    #[serde(default)]
216    pub r#type: Option<String>,
217}
218
219#[derive(Debug, Clone, Serialize, Deserialize)]
220pub struct CloudflareZonePlan {
221    #[serde(default)]
222    pub id: Option<String>,
223    #[serde(default)]
224    pub can_subscribe: Option<bool>,
225    #[serde(default)]
226    pub currency: Option<String>,
227    #[serde(default)]
228    pub externally_managed: Option<bool>,
229    #[serde(default)]
230    pub frequency: Option<String>,
231    #[serde(default)]
232    pub is_subscribed: Option<bool>,
233    #[serde(default)]
234    pub legacy_discount: Option<bool>,
235    #[serde(default)]
236    pub legacy_id: Option<String>,
237    #[serde(default)]
238    pub name: Option<String>,
239    #[serde(default)]
240    pub price: Option<f64>,
241}
242
243#[derive(Debug, Clone, Serialize, Deserialize, Default)]
244pub struct CloudflareZoneMeta {
245    #[serde(default)]
246    pub cdn_only: Option<bool>,
247    #[serde(default)]
248    pub dns_only: Option<bool>,
249    #[serde(default)]
250    pub foundation_dns: Option<bool>,
251    #[serde(default)]
252    pub custom_certificate_quota: Option<i64>,
253    #[serde(default)]
254    pub page_rule_quota: Option<i64>,
255    #[serde(default)]
256    pub phishing_detected: Option<bool>,
257    #[serde(default)]
258    pub step: Option<i64>,
259}
260
261#[derive(Debug, Clone, Serialize, Deserialize)]
262pub struct CloudflareZone {
263    pub id: String,
264    pub name: String,
265    #[serde(default)]
266    pub status: Option<String>,
267    #[serde(default)]
268    pub r#type: Option<String>,
269    #[serde(default)]
270    pub paused: Option<bool>,
271    #[serde(default)]
272    pub account: Option<CloudflareAccountRef>,
273    #[serde(default)]
274    pub owner: Option<CloudflareOwnerRef>,
275    #[serde(default)]
276    pub tenant: Option<CloudflareTenantRef>,
277    #[serde(default)]
278    pub tenant_unit: Option<CloudflareTenantUnitRef>,
279    #[serde(default)]
280    pub plan: Option<CloudflareZonePlan>,
281    #[serde(default)]
282    pub name_servers: Vec<String>,
283    #[serde(default)]
284    pub vanity_name_servers: Option<Vec<String>>,
285    #[serde(default)]
286    pub original_dnshost: Option<String>,
287    #[serde(default)]
288    pub original_name_servers: Option<Vec<String>>,
289    #[serde(default)]
290    pub original_registrar: Option<String>,
291    #[serde(default)]
292    pub activated_on: Option<String>,
293    pub created_on: String,
294    pub modified_on: String,
295    #[serde(default)]
296    pub development_mode: Option<f64>,
297    #[serde(default)]
298    pub cname_suffix: Option<String>,
299    #[serde(default)]
300    pub verification_key: Option<String>,
301    #[serde(default)]
302    pub permissions: Option<Vec<String>>,
303    #[serde(default)]
304    pub meta: CloudflareZoneMeta,
305}
306
307#[derive(Debug, Clone, Serialize, Deserialize, Default)]
308pub struct CloudflareZoneFilters {
309    #[serde(rename = "account.id", default)]
310    pub account_id: Option<String>,
311    #[serde(rename = "account.name", default)]
312    pub account_name: Option<String>,
313    #[serde(rename = "account.name[operator]", default)]
314    pub account_name_op: Option<String>,
315    #[serde(default)]
316    pub name: Option<String>,
317    #[serde(rename = "name[operator]", default)]
318    pub name_op: Option<String>,
319    #[serde(default)]
320    pub status: Option<String>,
321    #[serde(default)]
322    pub r#type: Vec<String>,
323    #[serde(default)]
324    pub r#match: Option<String>,
325    #[serde(default)]
326    pub order: Option<String>,
327    #[serde(default)]
328    pub direction: Option<String>,
329    #[serde(default)]
330    pub page: Option<u64>,
331    #[serde(default)]
332    pub per_page: Option<u64>,
333}
334
335#[derive(Debug, Clone, Serialize, Deserialize)]
336pub struct CloudflareDnsRecord {
337    pub id: String,
338    pub zone_id: String,
339    #[serde(default)]
340    pub zone_name: Option<String>,
341    pub name: String,
342    #[serde(rename = "type")]
343    pub record_type: String,
344    #[serde(default)]
345    pub content: Option<String>,
346    #[serde(default)]
347    pub ttl: Option<u32>,
348    #[serde(default)]
349    pub proxied: Option<bool>,
350    #[serde(default)]
351    pub priority: Option<u32>,
352    #[serde(default)]
353    pub comment: Option<String>,
354    #[serde(default)]
355    pub tags: Option<Vec<Value>>,
356    #[serde(default)]
357    pub data: Option<Value>,
358    #[serde(default)]
359    pub settings: Option<Value>,
360    #[serde(default)]
361    pub meta: Option<Value>,
362    #[serde(default)]
363    pub proxiable: Option<bool>,
364    #[serde(default)]
365    pub created_on: Option<String>,
366    #[serde(default)]
367    pub modified_on: Option<String>,
368}
369
370#[derive(Debug, Clone, Serialize, Deserialize)]
371pub struct CloudflareDnsRecordWrite {
372    #[serde(rename = "type")]
373    pub record_type: Option<String>,
374    #[serde(default)]
375    pub name: Option<String>,
376    #[serde(default)]
377    pub content: Option<String>,
378    #[serde(default)]
379    pub ttl: Option<u32>,
380    #[serde(default)]
381    pub proxied: Option<bool>,
382    #[serde(default)]
383    pub priority: Option<u32>,
384    #[serde(default)]
385    pub comment: Option<String>,
386    #[serde(default)]
387    pub tags: Option<Vec<String>>,
388    #[serde(default)]
389    pub data: Option<Value>,
390    #[serde(default)]
391    pub settings: Option<Value>,
392}
393
394#[derive(Debug, Clone, Serialize, Deserialize, Default)]
395pub struct CloudflareDnsRecordBatch {
396    #[serde(default)]
397    pub deletes: Vec<HashMap<String, String>>,
398    #[serde(default)]
399    pub patches: Vec<Value>,
400    #[serde(default)]
401    pub posts: Vec<Value>,
402}
403
404#[derive(Debug, Clone, Serialize, Deserialize)]
405pub struct CloudflareDnssec {
406    #[serde(default)]
407    pub status: Option<String>,
408    #[serde(default)]
409    pub flags: Option<u32>,
410    #[serde(default)]
411    pub algorithm: Option<String>,
412    #[serde(default)]
413    pub key_tag: Option<u32>,
414    #[serde(default)]
415    pub digest_type: Option<String>,
416    #[serde(default)]
417    pub digest_algorithm: Option<String>,
418    #[serde(default)]
419    pub digest: Option<String>,
420    #[serde(default)]
421    pub ds: Option<String>,
422    #[serde(default)]
423    pub public_key: Option<String>,
424    #[serde(default)]
425    pub modified_on: Option<String>,
426}
427
428#[derive(Debug, Clone, Serialize, Deserialize, Default)]
429pub struct CloudflareDnssecEdit {
430    #[serde(default)]
431    pub status: Option<String>,
432    #[serde(default)]
433    pub dnssec_multi_signer: Option<bool>,
434    #[serde(default)]
435    pub dnssec_presigned: Option<bool>,
436    #[serde(default)]
437    pub dnssec_use_nsec3: Option<bool>,
438}
439
440#[derive(Debug, Clone, Serialize, Deserialize)]
441pub struct CloudflareDnsSettingsNameservers {
442    #[serde(default)]
443    pub r#type: Option<String>,
444    #[serde(default)]
445    pub ns_set: Option<u32>,
446}
447
448#[derive(Debug, Clone, Serialize, Deserialize)]
449pub struct CloudflareDnsSettingsInternalDns {
450    #[serde(default)]
451    pub reference_zone_id: Option<String>,
452}
453
454#[derive(Debug, Clone, Serialize, Deserialize)]
455pub struct CloudflareDnsSettingsSoa {
456    #[serde(default)]
457    pub expire: Option<u32>,
458    #[serde(default)]
459    pub min_ttl: Option<u32>,
460    #[serde(default)]
461    pub mname: Option<String>,
462    #[serde(default)]
463    pub refresh: Option<u32>,
464    #[serde(default)]
465    pub retry: Option<u32>,
466    #[serde(default)]
467    pub rname: Option<String>,
468    #[serde(default)]
469    pub ttl: Option<u32>,
470}
471
472#[derive(Debug, Clone, Serialize, Deserialize, Default)]
473pub struct CloudflareDnsSettings {
474    #[serde(default)]
475    pub flatten_all_cnames: Option<bool>,
476    #[serde(default)]
477    pub foundation_dns: Option<bool>,
478    #[serde(default)]
479    pub multi_provider: Option<bool>,
480    #[serde(default)]
481    pub nameservers: Option<CloudflareDnsSettingsNameservers>,
482    #[serde(default)]
483    pub ns_ttl: Option<u32>,
484    #[serde(default)]
485    pub secondary_overrides: Option<bool>,
486    #[serde(default)]
487    pub soa: Option<CloudflareDnsSettingsSoa>,
488    #[serde(default)]
489    pub zone_mode: Option<String>,
490    #[serde(default)]
491    pub internal_dns: Option<CloudflareDnsSettingsInternalDns>,
492}
493
494#[derive(Debug, Clone, Serialize, Deserialize)]
495pub struct DomainPricing {
496    #[serde(default)]
497    pub currency: Option<String>,
498    #[serde(default)]
499    pub registration_cost: Option<String>,
500    #[serde(default)]
501    pub renewal_cost: Option<String>,
502}
503
504#[derive(Debug, Clone, Serialize, Deserialize)]
505pub struct DomainAvailability {
506    pub name: String,
507    pub registrable: bool,
508    #[serde(default)]
509    pub pricing: Option<DomainPricing>,
510    #[serde(default)]
511    pub reason: Option<String>,
512    #[serde(default)]
513    pub tier: Option<String>,
514}
515
516#[derive(Debug, Clone, Serialize, Deserialize, Default)]
517pub struct DomainRegistration {
518    #[serde(default)]
519    pub id: Option<String>,
520    #[serde(default)]
521    pub status: Option<String>,
522    #[serde(default)]
523    pub created_at: Option<String>,
524    #[serde(default)]
525    pub updated_at: Option<String>,
526    #[serde(flatten, default)]
527    pub extra: HashMap<String, Value>,
528}
529
530#[derive(Debug, Clone, Serialize, Deserialize, Default)]
531pub struct DomainWorkflowStatus {
532    #[serde(default)]
533    pub id: Option<String>,
534    #[serde(default)]
535    pub status: Option<String>,
536    #[serde(flatten, default)]
537    pub extra: HashMap<String, Value>,
538}
539
540#[derive(Debug, Clone, Serialize, Deserialize, Default)]
541pub struct RegisteredDomain {
542    pub name: String,
543    #[serde(default)]
544    pub account_id: Option<String>,
545    #[serde(default)]
546    pub auto_renew: Option<bool>,
547    #[serde(default)]
548    pub expires_at: Option<String>,
549    #[serde(default)]
550    pub registered_at: Option<String>,
551    #[serde(default)]
552    pub registration: Option<DomainRegistration>,
553    #[serde(default)]
554    pub workflow: Option<DomainWorkflowStatus>,
555    #[serde(flatten, default)]
556    pub extra: HashMap<String, Value>,
557}