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