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 CloudflareWorkerSettings {
96    #[serde(default)]
97    pub annotations: Option<Value>,
98    #[serde(default)]
99    pub bindings: Vec<Value>,
100    #[serde(default)]
101    pub compatibility_date: Option<String>,
102    #[serde(default)]
103    pub compatibility_flags: Option<Vec<String>>,
104    #[serde(default)]
105    pub keep_assets: Option<bool>,
106    #[serde(default)]
107    pub keep_bindings: Option<Vec<String>>,
108    #[serde(default)]
109    pub keep_vars: Option<bool>,
110    #[serde(default)]
111    pub logpush: Option<bool>,
112    #[serde(default)]
113    pub observability: Option<Value>,
114    #[serde(default)]
115    pub placement: Option<Value>,
116    #[serde(default)]
117    pub preview_urls: Option<bool>,
118    #[serde(default)]
119    pub tail_consumers: Option<Vec<Value>>,
120    #[serde(default)]
121    pub usage_model: Option<String>,
122    #[serde(default)]
123    pub workers_dev: Option<bool>,
124    #[serde(default)]
125    pub routes: Vec<Value>,
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize)]
129pub struct CloudflareAccountRef {
130    #[serde(default)]
131    pub id: Option<String>,
132    #[serde(default)]
133    pub name: Option<String>,
134}
135
136#[derive(Debug, Clone, Serialize, Deserialize)]
137pub struct CloudflareOwnerRef {
138    #[serde(default)]
139    pub id: Option<String>,
140    #[serde(default)]
141    pub name: Option<String>,
142    #[serde(default)]
143    pub r#type: Option<String>,
144}
145
146#[derive(Debug, Clone, Serialize, Deserialize)]
147pub struct CloudflareTenantRef {
148    #[serde(default)]
149    pub id: Option<String>,
150    #[serde(default)]
151    pub name: Option<String>,
152}
153
154#[derive(Debug, Clone, Serialize, Deserialize)]
155pub struct CloudflareTenantUnitRef {
156    #[serde(default)]
157    pub id: Option<String>,
158    #[serde(default)]
159    pub r#type: Option<String>,
160}
161
162#[derive(Debug, Clone, Serialize, Deserialize)]
163pub struct CloudflareZonePlan {
164    #[serde(default)]
165    pub id: Option<String>,
166    #[serde(default)]
167    pub can_subscribe: Option<bool>,
168    #[serde(default)]
169    pub currency: Option<String>,
170    #[serde(default)]
171    pub externally_managed: Option<bool>,
172    #[serde(default)]
173    pub frequency: Option<String>,
174    #[serde(default)]
175    pub is_subscribed: Option<bool>,
176    #[serde(default)]
177    pub legacy_discount: Option<bool>,
178    #[serde(default)]
179    pub legacy_id: Option<String>,
180    #[serde(default)]
181    pub name: Option<String>,
182    #[serde(default)]
183    pub price: Option<f64>,
184}
185
186#[derive(Debug, Clone, Serialize, Deserialize, Default)]
187pub struct CloudflareZoneMeta {
188    #[serde(default)]
189    pub cdn_only: Option<bool>,
190    #[serde(default)]
191    pub dns_only: Option<bool>,
192    #[serde(default)]
193    pub foundation_dns: Option<bool>,
194    #[serde(default)]
195    pub custom_certificate_quota: Option<i64>,
196    #[serde(default)]
197    pub page_rule_quota: Option<i64>,
198    #[serde(default)]
199    pub phishing_detected: Option<bool>,
200    #[serde(default)]
201    pub step: Option<i64>,
202}
203
204#[derive(Debug, Clone, Serialize, Deserialize)]
205pub struct CloudflareZone {
206    pub id: String,
207    pub name: String,
208    #[serde(default)]
209    pub status: Option<String>,
210    #[serde(default)]
211    pub r#type: Option<String>,
212    #[serde(default)]
213    pub paused: Option<bool>,
214    #[serde(default)]
215    pub account: Option<CloudflareAccountRef>,
216    #[serde(default)]
217    pub owner: Option<CloudflareOwnerRef>,
218    #[serde(default)]
219    pub tenant: Option<CloudflareTenantRef>,
220    #[serde(default)]
221    pub tenant_unit: Option<CloudflareTenantUnitRef>,
222    #[serde(default)]
223    pub plan: Option<CloudflareZonePlan>,
224    #[serde(default)]
225    pub name_servers: Vec<String>,
226    #[serde(default)]
227    pub vanity_name_servers: Option<Vec<String>>,
228    #[serde(default)]
229    pub original_dnshost: Option<String>,
230    #[serde(default)]
231    pub original_name_servers: Option<Vec<String>>,
232    #[serde(default)]
233    pub original_registrar: Option<String>,
234    #[serde(default)]
235    pub activated_on: Option<String>,
236    pub created_on: String,
237    pub modified_on: String,
238    #[serde(default)]
239    pub development_mode: Option<f64>,
240    #[serde(default)]
241    pub cname_suffix: Option<String>,
242    #[serde(default)]
243    pub verification_key: Option<String>,
244    #[serde(default)]
245    pub permissions: Option<Vec<String>>,
246    #[serde(default)]
247    pub meta: CloudflareZoneMeta,
248}
249
250#[derive(Debug, Clone, Serialize, Deserialize, Default)]
251pub struct CloudflareZoneFilters {
252    #[serde(rename = "account.id", default)]
253    pub account_id: Option<String>,
254    #[serde(rename = "account.name", default)]
255    pub account_name: Option<String>,
256    #[serde(rename = "account.name[operator]", default)]
257    pub account_name_op: Option<String>,
258    #[serde(default)]
259    pub name: Option<String>,
260    #[serde(rename = "name[operator]", default)]
261    pub name_op: Option<String>,
262    #[serde(default)]
263    pub status: Option<String>,
264    #[serde(default)]
265    pub r#type: Vec<String>,
266    #[serde(default)]
267    pub r#match: Option<String>,
268    #[serde(default)]
269    pub order: Option<String>,
270    #[serde(default)]
271    pub direction: Option<String>,
272    #[serde(default)]
273    pub page: Option<u64>,
274    #[serde(default)]
275    pub per_page: Option<u64>,
276}
277
278#[derive(Debug, Clone, Serialize, Deserialize)]
279pub struct CloudflareDnsRecord {
280    pub id: String,
281    pub zone_id: String,
282    #[serde(default)]
283    pub zone_name: Option<String>,
284    pub name: String,
285    #[serde(rename = "type")]
286    pub record_type: String,
287    #[serde(default)]
288    pub content: Option<String>,
289    #[serde(default)]
290    pub ttl: Option<u32>,
291    #[serde(default)]
292    pub proxied: Option<bool>,
293    #[serde(default)]
294    pub priority: Option<u32>,
295    #[serde(default)]
296    pub comment: Option<String>,
297    #[serde(default)]
298    pub tags: Option<Vec<Value>>,
299    #[serde(default)]
300    pub data: Option<Value>,
301    #[serde(default)]
302    pub settings: Option<Value>,
303    #[serde(default)]
304    pub meta: Option<Value>,
305    #[serde(default)]
306    pub proxiable: Option<bool>,
307    #[serde(default)]
308    pub created_on: Option<String>,
309    #[serde(default)]
310    pub modified_on: Option<String>,
311}
312
313#[derive(Debug, Clone, Serialize, Deserialize)]
314pub struct CloudflareDnsRecordWrite {
315    #[serde(rename = "type")]
316    pub record_type: Option<String>,
317    #[serde(default)]
318    pub name: Option<String>,
319    #[serde(default)]
320    pub content: Option<String>,
321    #[serde(default)]
322    pub ttl: Option<u32>,
323    #[serde(default)]
324    pub proxied: Option<bool>,
325    #[serde(default)]
326    pub priority: Option<u32>,
327    #[serde(default)]
328    pub comment: Option<String>,
329    #[serde(default)]
330    pub tags: Option<Vec<String>>,
331    #[serde(default)]
332    pub data: Option<Value>,
333    #[serde(default)]
334    pub settings: Option<Value>,
335}
336
337#[derive(Debug, Clone, Serialize, Deserialize, Default)]
338pub struct CloudflareDnsRecordBatch {
339    #[serde(default)]
340    pub deletes: Vec<HashMap<String, String>>,
341    #[serde(default)]
342    pub patches: Vec<Value>,
343    #[serde(default)]
344    pub posts: Vec<Value>,
345}
346
347#[derive(Debug, Clone, Serialize, Deserialize)]
348pub struct CloudflareDnssec {
349    #[serde(default)]
350    pub status: Option<String>,
351    #[serde(default)]
352    pub flags: Option<u32>,
353    #[serde(default)]
354    pub algorithm: Option<String>,
355    #[serde(default)]
356    pub key_tag: Option<u32>,
357    #[serde(default)]
358    pub digest_type: Option<String>,
359    #[serde(default)]
360    pub digest_algorithm: Option<String>,
361    #[serde(default)]
362    pub digest: Option<String>,
363    #[serde(default)]
364    pub ds: Option<String>,
365    #[serde(default)]
366    pub public_key: Option<String>,
367    #[serde(default)]
368    pub modified_on: Option<String>,
369}
370
371#[derive(Debug, Clone, Serialize, Deserialize, Default)]
372pub struct CloudflareDnssecEdit {
373    #[serde(default)]
374    pub status: Option<String>,
375    #[serde(default)]
376    pub dnssec_multi_signer: Option<bool>,
377    #[serde(default)]
378    pub dnssec_presigned: Option<bool>,
379    #[serde(default)]
380    pub dnssec_use_nsec3: Option<bool>,
381}
382
383#[derive(Debug, Clone, Serialize, Deserialize)]
384pub struct CloudflareDnsSettingsNameservers {
385    #[serde(default)]
386    pub r#type: Option<String>,
387    #[serde(default)]
388    pub ns_set: Option<u32>,
389}
390
391#[derive(Debug, Clone, Serialize, Deserialize)]
392pub struct CloudflareDnsSettingsInternalDns {
393    #[serde(default)]
394    pub reference_zone_id: Option<String>,
395}
396
397#[derive(Debug, Clone, Serialize, Deserialize)]
398pub struct CloudflareDnsSettingsSoa {
399    #[serde(default)]
400    pub expire: Option<u32>,
401    #[serde(default)]
402    pub min_ttl: Option<u32>,
403    #[serde(default)]
404    pub mname: Option<String>,
405    #[serde(default)]
406    pub refresh: Option<u32>,
407    #[serde(default)]
408    pub retry: Option<u32>,
409    #[serde(default)]
410    pub rname: Option<String>,
411    #[serde(default)]
412    pub ttl: Option<u32>,
413}
414
415#[derive(Debug, Clone, Serialize, Deserialize, Default)]
416pub struct CloudflareDnsSettings {
417    #[serde(default)]
418    pub flatten_all_cnames: Option<bool>,
419    #[serde(default)]
420    pub foundation_dns: Option<bool>,
421    #[serde(default)]
422    pub multi_provider: Option<bool>,
423    #[serde(default)]
424    pub nameservers: Option<CloudflareDnsSettingsNameservers>,
425    #[serde(default)]
426    pub ns_ttl: Option<u32>,
427    #[serde(default)]
428    pub secondary_overrides: Option<bool>,
429    #[serde(default)]
430    pub soa: Option<CloudflareDnsSettingsSoa>,
431    #[serde(default)]
432    pub zone_mode: Option<String>,
433    #[serde(default)]
434    pub internal_dns: Option<CloudflareDnsSettingsInternalDns>,
435}
436
437#[derive(Debug, Clone, Serialize, Deserialize)]
438pub struct DomainPricing {
439    #[serde(default)]
440    pub currency: Option<String>,
441    #[serde(default)]
442    pub registration_cost: Option<String>,
443    #[serde(default)]
444    pub renewal_cost: Option<String>,
445}
446
447#[derive(Debug, Clone, Serialize, Deserialize)]
448pub struct DomainAvailability {
449    pub name: String,
450    pub registrable: bool,
451    #[serde(default)]
452    pub pricing: Option<DomainPricing>,
453    #[serde(default)]
454    pub reason: Option<String>,
455    #[serde(default)]
456    pub tier: Option<String>,
457}
458
459#[derive(Debug, Clone, Serialize, Deserialize, Default)]
460pub struct DomainRegistration {
461    #[serde(default)]
462    pub id: Option<String>,
463    #[serde(default)]
464    pub status: Option<String>,
465    #[serde(default)]
466    pub created_at: Option<String>,
467    #[serde(default)]
468    pub updated_at: Option<String>,
469    #[serde(flatten, default)]
470    pub extra: HashMap<String, Value>,
471}
472
473#[derive(Debug, Clone, Serialize, Deserialize, Default)]
474pub struct DomainWorkflowStatus {
475    #[serde(default)]
476    pub id: Option<String>,
477    #[serde(default)]
478    pub status: Option<String>,
479    #[serde(flatten, default)]
480    pub extra: HashMap<String, Value>,
481}
482
483#[derive(Debug, Clone, Serialize, Deserialize, Default)]
484pub struct RegisteredDomain {
485    pub name: String,
486    #[serde(default)]
487    pub account_id: Option<String>,
488    #[serde(default)]
489    pub auto_renew: Option<bool>,
490    #[serde(default)]
491    pub expires_at: Option<String>,
492    #[serde(default)]
493    pub registered_at: Option<String>,
494    #[serde(default)]
495    pub registration: Option<DomainRegistration>,
496    #[serde(default)]
497    pub workflow: Option<DomainWorkflowStatus>,
498    #[serde(flatten, default)]
499    pub extra: HashMap<String, Value>,
500}