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)]
170pub struct CloudflareAccountRef {
171    #[serde(default)]
172    pub id: Option<String>,
173    #[serde(default)]
174    pub name: Option<String>,
175}
176
177#[derive(Debug, Clone, Serialize, Deserialize)]
178pub struct CloudflareOwnerRef {
179    #[serde(default)]
180    pub id: Option<String>,
181    #[serde(default)]
182    pub name: Option<String>,
183    #[serde(default)]
184    pub r#type: Option<String>,
185}
186
187#[derive(Debug, Clone, Serialize, Deserialize)]
188pub struct CloudflareTenantRef {
189    #[serde(default)]
190    pub id: Option<String>,
191    #[serde(default)]
192    pub name: Option<String>,
193}
194
195#[derive(Debug, Clone, Serialize, Deserialize)]
196pub struct CloudflareTenantUnitRef {
197    #[serde(default)]
198    pub id: Option<String>,
199    #[serde(default)]
200    pub r#type: Option<String>,
201}
202
203#[derive(Debug, Clone, Serialize, Deserialize)]
204pub struct CloudflareZonePlan {
205    #[serde(default)]
206    pub id: Option<String>,
207    #[serde(default)]
208    pub can_subscribe: Option<bool>,
209    #[serde(default)]
210    pub currency: Option<String>,
211    #[serde(default)]
212    pub externally_managed: Option<bool>,
213    #[serde(default)]
214    pub frequency: Option<String>,
215    #[serde(default)]
216    pub is_subscribed: Option<bool>,
217    #[serde(default)]
218    pub legacy_discount: Option<bool>,
219    #[serde(default)]
220    pub legacy_id: Option<String>,
221    #[serde(default)]
222    pub name: Option<String>,
223    #[serde(default)]
224    pub price: Option<f64>,
225}
226
227#[derive(Debug, Clone, Serialize, Deserialize, Default)]
228pub struct CloudflareZoneMeta {
229    #[serde(default)]
230    pub cdn_only: Option<bool>,
231    #[serde(default)]
232    pub dns_only: Option<bool>,
233    #[serde(default)]
234    pub foundation_dns: Option<bool>,
235    #[serde(default)]
236    pub custom_certificate_quota: Option<i64>,
237    #[serde(default)]
238    pub page_rule_quota: Option<i64>,
239    #[serde(default)]
240    pub phishing_detected: Option<bool>,
241    #[serde(default)]
242    pub step: Option<i64>,
243}
244
245#[derive(Debug, Clone, Serialize, Deserialize)]
246pub struct CloudflareZone {
247    pub id: String,
248    pub name: String,
249    #[serde(default)]
250    pub status: Option<String>,
251    #[serde(default)]
252    pub r#type: Option<String>,
253    #[serde(default)]
254    pub paused: Option<bool>,
255    #[serde(default)]
256    pub account: Option<CloudflareAccountRef>,
257    #[serde(default)]
258    pub owner: Option<CloudflareOwnerRef>,
259    #[serde(default)]
260    pub tenant: Option<CloudflareTenantRef>,
261    #[serde(default)]
262    pub tenant_unit: Option<CloudflareTenantUnitRef>,
263    #[serde(default)]
264    pub plan: Option<CloudflareZonePlan>,
265    #[serde(default)]
266    pub name_servers: Vec<String>,
267    #[serde(default)]
268    pub vanity_name_servers: Option<Vec<String>>,
269    #[serde(default)]
270    pub original_dnshost: Option<String>,
271    #[serde(default)]
272    pub original_name_servers: Option<Vec<String>>,
273    #[serde(default)]
274    pub original_registrar: Option<String>,
275    #[serde(default)]
276    pub activated_on: Option<String>,
277    pub created_on: String,
278    pub modified_on: String,
279    #[serde(default)]
280    pub development_mode: Option<f64>,
281    #[serde(default)]
282    pub cname_suffix: Option<String>,
283    #[serde(default)]
284    pub verification_key: Option<String>,
285    #[serde(default)]
286    pub permissions: Option<Vec<String>>,
287    #[serde(default)]
288    pub meta: CloudflareZoneMeta,
289}
290
291#[derive(Debug, Clone, Serialize, Deserialize, Default)]
292pub struct CloudflareZoneFilters {
293    #[serde(rename = "account.id", default)]
294    pub account_id: Option<String>,
295    #[serde(rename = "account.name", default)]
296    pub account_name: Option<String>,
297    #[serde(rename = "account.name[operator]", default)]
298    pub account_name_op: Option<String>,
299    #[serde(default)]
300    pub name: Option<String>,
301    #[serde(rename = "name[operator]", default)]
302    pub name_op: Option<String>,
303    #[serde(default)]
304    pub status: Option<String>,
305    #[serde(default)]
306    pub r#type: Vec<String>,
307    #[serde(default)]
308    pub r#match: Option<String>,
309    #[serde(default)]
310    pub order: Option<String>,
311    #[serde(default)]
312    pub direction: Option<String>,
313    #[serde(default)]
314    pub page: Option<u64>,
315    #[serde(default)]
316    pub per_page: Option<u64>,
317}
318
319#[derive(Debug, Clone, Serialize, Deserialize)]
320pub struct CloudflareDnsRecord {
321    pub id: String,
322    pub zone_id: String,
323    #[serde(default)]
324    pub zone_name: Option<String>,
325    pub name: String,
326    #[serde(rename = "type")]
327    pub record_type: String,
328    #[serde(default)]
329    pub content: Option<String>,
330    #[serde(default)]
331    pub ttl: Option<u32>,
332    #[serde(default)]
333    pub proxied: Option<bool>,
334    #[serde(default)]
335    pub priority: Option<u32>,
336    #[serde(default)]
337    pub comment: Option<String>,
338    #[serde(default)]
339    pub tags: Option<Vec<Value>>,
340    #[serde(default)]
341    pub data: Option<Value>,
342    #[serde(default)]
343    pub settings: Option<Value>,
344    #[serde(default)]
345    pub meta: Option<Value>,
346    #[serde(default)]
347    pub proxiable: Option<bool>,
348    #[serde(default)]
349    pub created_on: Option<String>,
350    #[serde(default)]
351    pub modified_on: Option<String>,
352}
353
354#[derive(Debug, Clone, Serialize, Deserialize)]
355pub struct CloudflareDnsRecordWrite {
356    #[serde(rename = "type")]
357    pub record_type: Option<String>,
358    #[serde(default)]
359    pub name: Option<String>,
360    #[serde(default)]
361    pub content: Option<String>,
362    #[serde(default)]
363    pub ttl: Option<u32>,
364    #[serde(default)]
365    pub proxied: Option<bool>,
366    #[serde(default)]
367    pub priority: Option<u32>,
368    #[serde(default)]
369    pub comment: Option<String>,
370    #[serde(default)]
371    pub tags: Option<Vec<String>>,
372    #[serde(default)]
373    pub data: Option<Value>,
374    #[serde(default)]
375    pub settings: Option<Value>,
376}
377
378#[derive(Debug, Clone, Serialize, Deserialize, Default)]
379pub struct CloudflareDnsRecordBatch {
380    #[serde(default)]
381    pub deletes: Vec<HashMap<String, String>>,
382    #[serde(default)]
383    pub patches: Vec<Value>,
384    #[serde(default)]
385    pub posts: Vec<Value>,
386}
387
388#[derive(Debug, Clone, Serialize, Deserialize)]
389pub struct CloudflareDnssec {
390    #[serde(default)]
391    pub status: Option<String>,
392    #[serde(default)]
393    pub flags: Option<u32>,
394    #[serde(default)]
395    pub algorithm: Option<String>,
396    #[serde(default)]
397    pub key_tag: Option<u32>,
398    #[serde(default)]
399    pub digest_type: Option<String>,
400    #[serde(default)]
401    pub digest_algorithm: Option<String>,
402    #[serde(default)]
403    pub digest: Option<String>,
404    #[serde(default)]
405    pub ds: Option<String>,
406    #[serde(default)]
407    pub public_key: Option<String>,
408    #[serde(default)]
409    pub modified_on: Option<String>,
410}
411
412#[derive(Debug, Clone, Serialize, Deserialize, Default)]
413pub struct CloudflareDnssecEdit {
414    #[serde(default)]
415    pub status: Option<String>,
416    #[serde(default)]
417    pub dnssec_multi_signer: Option<bool>,
418    #[serde(default)]
419    pub dnssec_presigned: Option<bool>,
420    #[serde(default)]
421    pub dnssec_use_nsec3: Option<bool>,
422}
423
424#[derive(Debug, Clone, Serialize, Deserialize)]
425pub struct CloudflareDnsSettingsNameservers {
426    #[serde(default)]
427    pub r#type: Option<String>,
428    #[serde(default)]
429    pub ns_set: Option<u32>,
430}
431
432#[derive(Debug, Clone, Serialize, Deserialize)]
433pub struct CloudflareDnsSettingsInternalDns {
434    #[serde(default)]
435    pub reference_zone_id: Option<String>,
436}
437
438#[derive(Debug, Clone, Serialize, Deserialize)]
439pub struct CloudflareDnsSettingsSoa {
440    #[serde(default)]
441    pub expire: Option<u32>,
442    #[serde(default)]
443    pub min_ttl: Option<u32>,
444    #[serde(default)]
445    pub mname: Option<String>,
446    #[serde(default)]
447    pub refresh: Option<u32>,
448    #[serde(default)]
449    pub retry: Option<u32>,
450    #[serde(default)]
451    pub rname: Option<String>,
452    #[serde(default)]
453    pub ttl: Option<u32>,
454}
455
456#[derive(Debug, Clone, Serialize, Deserialize, Default)]
457pub struct CloudflareDnsSettings {
458    #[serde(default)]
459    pub flatten_all_cnames: Option<bool>,
460    #[serde(default)]
461    pub foundation_dns: Option<bool>,
462    #[serde(default)]
463    pub multi_provider: Option<bool>,
464    #[serde(default)]
465    pub nameservers: Option<CloudflareDnsSettingsNameservers>,
466    #[serde(default)]
467    pub ns_ttl: Option<u32>,
468    #[serde(default)]
469    pub secondary_overrides: Option<bool>,
470    #[serde(default)]
471    pub soa: Option<CloudflareDnsSettingsSoa>,
472    #[serde(default)]
473    pub zone_mode: Option<String>,
474    #[serde(default)]
475    pub internal_dns: Option<CloudflareDnsSettingsInternalDns>,
476}
477
478#[derive(Debug, Clone, Serialize, Deserialize)]
479pub struct DomainPricing {
480    #[serde(default)]
481    pub currency: Option<String>,
482    #[serde(default)]
483    pub registration_cost: Option<String>,
484    #[serde(default)]
485    pub renewal_cost: Option<String>,
486}
487
488#[derive(Debug, Clone, Serialize, Deserialize)]
489pub struct DomainAvailability {
490    pub name: String,
491    pub registrable: bool,
492    #[serde(default)]
493    pub pricing: Option<DomainPricing>,
494    #[serde(default)]
495    pub reason: Option<String>,
496    #[serde(default)]
497    pub tier: Option<String>,
498}
499
500#[derive(Debug, Clone, Serialize, Deserialize, Default)]
501pub struct DomainRegistration {
502    #[serde(default)]
503    pub id: Option<String>,
504    #[serde(default)]
505    pub status: Option<String>,
506    #[serde(default)]
507    pub created_at: Option<String>,
508    #[serde(default)]
509    pub updated_at: Option<String>,
510    #[serde(flatten, default)]
511    pub extra: HashMap<String, Value>,
512}
513
514#[derive(Debug, Clone, Serialize, Deserialize, Default)]
515pub struct DomainWorkflowStatus {
516    #[serde(default)]
517    pub id: Option<String>,
518    #[serde(default)]
519    pub status: Option<String>,
520    #[serde(flatten, default)]
521    pub extra: HashMap<String, Value>,
522}
523
524#[derive(Debug, Clone, Serialize, Deserialize, Default)]
525pub struct RegisteredDomain {
526    pub name: String,
527    #[serde(default)]
528    pub account_id: Option<String>,
529    #[serde(default)]
530    pub auto_renew: Option<bool>,
531    #[serde(default)]
532    pub expires_at: Option<String>,
533    #[serde(default)]
534    pub registered_at: Option<String>,
535    #[serde(default)]
536    pub registration: Option<DomainRegistration>,
537    #[serde(default)]
538    pub workflow: Option<DomainWorkflowStatus>,
539    #[serde(flatten, default)]
540    pub extra: HashMap<String, Value>,
541}