Skip to main content

mountos_admin_sdk/
types_gen.rs

1// Code generated by gen; DO NOT EDIT.
2
3use serde::{Deserialize, Serialize};
4
5/// Client configuration.
6#[derive(Debug, Clone, Default)]
7pub struct Config {
8    /// Base URL of the appserv provider API, e.g. `https://appserv.example.com`.
9    pub base_url: String,
10    /// Base64-encoded ED25519 private key (32-byte seed or 64-byte seed+public key).
11    pub private_key: String,
12    /// Optional dashboard operator context, signed into each request.
13    pub dashboard_user: Option<DashboardUser>,
14    /// Dedicated HMAC secret for the `X-MountOS-Dashboard-User` header (appserv
15    /// `DASHBOARD_USER_HMAC_KEY`); required when `dashboard_user` is set.
16    pub dashboard_hmac_key: Option<String>,
17}
18
19/// Page-based pagination options.
20#[derive(Debug, Clone, Default)]
21pub struct ListOptions {
22    pub page: Option<i64>,
23    pub limit: Option<i64>,
24}
25
26/// Pagination metadata returned by page-based list endpoints.
27#[derive(Debug, Clone, Deserialize)]
28pub struct PaginationMeta {
29    pub page: i64,
30    pub limit: i64,
31    pub total: i64,
32    #[serde(rename = "totalPages")]
33    pub total_pages: i64,
34}
35
36/// Page-based list response.
37#[derive(Debug, Clone, Deserialize)]
38pub struct PaginatedResponse<T> {
39    pub items: Vec<T>,
40    pub pagination: PaginationMeta,
41}
42
43/// Cursor-based list response.
44#[derive(Debug, Clone, Deserialize)]
45pub struct CursorPaginatedResponse<T> {
46    pub items: Vec<T>,
47    #[serde(rename = "nextCursor")]
48    pub next_cursor: Option<i64>,
49}
50
51/// Identifier returned by create/edit/toggle endpoints.
52#[derive(Debug, Clone, Deserialize)]
53pub struct IdResponse {
54    pub id: i64,
55}
56
57/// `ClientSessionStatus` values accepted/returned on the wire. `UnknownValue` preserves a
58/// value this SDK does not recognize yet, for forward compatibility with
59/// a server that has introduced a new ClientSessionStatus value.
60#[derive(Debug, Clone, PartialEq, Eq)]
61pub enum ClientSessionStatus {
62    Connected,
63    Active,
64    Degraded,
65    Disconnected,
66    Expired,
67    Unknown,
68    /// A value not defined when this SDK was generated.
69    UnknownValue(String),
70}
71
72impl ClientSessionStatus {
73    /// Returns the wire string for this value.
74    pub fn as_str(&self) -> &str {
75        match self {
76            ClientSessionStatus::Connected => "connected",
77            ClientSessionStatus::Active => "active",
78            ClientSessionStatus::Degraded => "degraded",
79            ClientSessionStatus::Disconnected => "disconnected",
80            ClientSessionStatus::Expired => "expired",
81            ClientSessionStatus::Unknown => "unknown",
82            ClientSessionStatus::UnknownValue(s) => s.as_str(),
83        }
84    }
85
86    /// Reports whether this is one of the values defined when this SDK was
87    /// generated (false for `UnknownValue`).
88    pub fn is_known(&self) -> bool {
89        !matches!(self, ClientSessionStatus::UnknownValue(_))
90    }
91}
92
93impl std::fmt::Display for ClientSessionStatus {
94    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
95        f.write_str(self.as_str())
96    }
97}
98
99impl From<&str> for ClientSessionStatus {
100    fn from(s: &str) -> Self {
101        match s {
102            "connected" => ClientSessionStatus::Connected,
103            "active" => ClientSessionStatus::Active,
104            "degraded" => ClientSessionStatus::Degraded,
105            "disconnected" => ClientSessionStatus::Disconnected,
106            "expired" => ClientSessionStatus::Expired,
107            "unknown" => ClientSessionStatus::Unknown,
108            other => ClientSessionStatus::UnknownValue(other.to_string()),
109        }
110    }
111}
112
113impl Serialize for ClientSessionStatus {
114    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
115    where
116        S: serde::Serializer,
117    {
118        serializer.serialize_str(self.as_str())
119    }
120}
121
122impl<'de> Deserialize<'de> for ClientSessionStatus {
123    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
124    where
125        D: serde::Deserializer<'de>,
126    {
127        let s = String::deserialize(deserializer)?;
128        Ok(ClientSessionStatus::from(s.as_str()))
129    }
130}
131
132/// `LicenseQuotaState` values accepted/returned on the wire. `Unknown` preserves a
133/// value this SDK does not recognize yet, for forward compatibility with
134/// a server that has introduced a new LicenseQuotaState value.
135#[derive(Debug, Clone, PartialEq, Eq)]
136pub enum LicenseQuotaState {
137    Ok,
138    Exceeded,
139    /// A value not defined when this SDK was generated.
140    Unknown(String),
141}
142
143impl LicenseQuotaState {
144    /// Returns the wire string for this value.
145    pub fn as_str(&self) -> &str {
146        match self {
147            LicenseQuotaState::Ok => "ok",
148            LicenseQuotaState::Exceeded => "exceeded",
149            LicenseQuotaState::Unknown(s) => s.as_str(),
150        }
151    }
152
153    /// Reports whether this is one of the values defined when this SDK was
154    /// generated (false for `Unknown`).
155    pub fn is_known(&self) -> bool {
156        !matches!(self, LicenseQuotaState::Unknown(_))
157    }
158}
159
160impl std::fmt::Display for LicenseQuotaState {
161    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
162        f.write_str(self.as_str())
163    }
164}
165
166impl From<&str> for LicenseQuotaState {
167    fn from(s: &str) -> Self {
168        match s {
169            "ok" => LicenseQuotaState::Ok,
170            "exceeded" => LicenseQuotaState::Exceeded,
171            other => LicenseQuotaState::Unknown(other.to_string()),
172        }
173    }
174}
175
176impl Serialize for LicenseQuotaState {
177    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
178    where
179        S: serde::Serializer,
180    {
181        serializer.serialize_str(self.as_str())
182    }
183}
184
185impl<'de> Deserialize<'de> for LicenseQuotaState {
186    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
187    where
188        D: serde::Deserializer<'de>,
189    {
190        let s = String::deserialize(deserializer)?;
191        Ok(LicenseQuotaState::from(s.as_str()))
192    }
193}
194
195/// `LicenseStatus` values accepted/returned on the wire. `Unknown` preserves a
196/// value this SDK does not recognize yet, for forward compatibility with
197/// a server that has introduced a new LicenseStatus value.
198#[derive(Debug, Clone, PartialEq, Eq)]
199pub enum LicenseStatus {
200    Valid,
201    Expiring,
202    Grace,
203    ExpiredAccess,
204    Expired,
205    /// A value not defined when this SDK was generated.
206    Unknown(String),
207}
208
209impl LicenseStatus {
210    /// Returns the wire string for this value.
211    pub fn as_str(&self) -> &str {
212        match self {
213            LicenseStatus::Valid => "valid",
214            LicenseStatus::Expiring => "expiring",
215            LicenseStatus::Grace => "grace",
216            LicenseStatus::ExpiredAccess => "expired_access",
217            LicenseStatus::Expired => "expired",
218            LicenseStatus::Unknown(s) => s.as_str(),
219        }
220    }
221
222    /// Reports whether this is one of the values defined when this SDK was
223    /// generated (false for `Unknown`).
224    pub fn is_known(&self) -> bool {
225        !matches!(self, LicenseStatus::Unknown(_))
226    }
227}
228
229impl std::fmt::Display for LicenseStatus {
230    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
231        f.write_str(self.as_str())
232    }
233}
234
235impl From<&str> for LicenseStatus {
236    fn from(s: &str) -> Self {
237        match s {
238            "valid" => LicenseStatus::Valid,
239            "expiring" => LicenseStatus::Expiring,
240            "grace" => LicenseStatus::Grace,
241            "expired_access" => LicenseStatus::ExpiredAccess,
242            "expired" => LicenseStatus::Expired,
243            other => LicenseStatus::Unknown(other.to_string()),
244        }
245    }
246}
247
248impl Serialize for LicenseStatus {
249    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
250    where
251        S: serde::Serializer,
252    {
253        serializer.serialize_str(self.as_str())
254    }
255}
256
257impl<'de> Deserialize<'de> for LicenseStatus {
258    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
259    where
260        D: serde::Deserializer<'de>,
261    {
262        let s = String::deserialize(deserializer)?;
263        Ok(LicenseStatus::from(s.as_str()))
264    }
265}
266
267/// `PairState` values accepted/returned on the wire. `Unknown` preserves a
268/// value this SDK does not recognize yet, for forward compatibility with
269/// a server that has introduced a new PairState value.
270#[derive(Debug, Clone, PartialEq, Eq)]
271pub enum PairState {
272    Active,
273    Draining,
274    SyncedDrained,
275    Retired,
276    /// A value not defined when this SDK was generated.
277    Unknown(String),
278}
279
280impl PairState {
281    /// Returns the wire string for this value.
282    pub fn as_str(&self) -> &str {
283        match self {
284            PairState::Active => "active",
285            PairState::Draining => "draining",
286            PairState::SyncedDrained => "synced_drained",
287            PairState::Retired => "retired",
288            PairState::Unknown(s) => s.as_str(),
289        }
290    }
291
292    /// Reports whether this is one of the values defined when this SDK was
293    /// generated (false for `Unknown`).
294    pub fn is_known(&self) -> bool {
295        !matches!(self, PairState::Unknown(_))
296    }
297}
298
299impl std::fmt::Display for PairState {
300    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
301        f.write_str(self.as_str())
302    }
303}
304
305impl From<&str> for PairState {
306    fn from(s: &str) -> Self {
307        match s {
308            "active" => PairState::Active,
309            "draining" => PairState::Draining,
310            "synced_drained" => PairState::SyncedDrained,
311            "retired" => PairState::Retired,
312            other => PairState::Unknown(other.to_string()),
313        }
314    }
315}
316
317impl Serialize for PairState {
318    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
319    where
320        S: serde::Serializer,
321    {
322        serializer.serialize_str(self.as_str())
323    }
324}
325
326impl<'de> Deserialize<'de> for PairState {
327    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
328    where
329        D: serde::Deserializer<'de>,
330    {
331        let s = String::deserialize(deserializer)?;
332        Ok(PairState::from(s.as_str()))
333    }
334}
335
336#[derive(Debug, Clone, Serialize, Deserialize)]
337pub struct Account {
338    pub id: i64,
339    pub name: String,
340    pub description: String,
341    #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
342    pub icon_url: Option<String>,
343    #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
344    pub provider_info: Option<serde_json::Value>,
345    #[serde(rename = "liveVolume")]
346    pub live_volume: i64,
347    #[serde(rename = "totalVolume")]
348    pub total_volume: i64,
349    #[serde(rename = "quotaLimit")]
350    pub quota_limit: i64,
351    #[serde(rename = "quotaExcessPct")]
352    pub quota_excess_pct: i32,
353    #[serde(rename = "isActive")]
354    pub is_active: bool,
355    pub locked: bool,
356    #[serde(skip_serializing_if = "Option::is_none")]
357    pub retention: Option<RetentionPolicy>,
358    #[serde(rename = "createdAt")]
359    pub created_at: String,
360    #[serde(rename = "updatedAt")]
361    pub updated_at: String,
362}
363
364#[derive(Debug, Clone, Serialize, Deserialize)]
365pub struct User {
366    pub id: i64,
367    #[serde(rename = "accountId")]
368    pub account_id: i64,
369    pub username: String,
370    pub email: String,
371    pub name: String,
372    #[serde(rename = "isActive")]
373    pub is_active: bool,
374}
375
376#[derive(Debug, Clone, Serialize, Deserialize)]
377pub struct Region {
378    pub id: i64,
379    #[serde(rename = "exportId")]
380    pub export_id: String,
381    #[serde(rename = "accountId")]
382    pub account_id: i64,
383    pub name: String,
384    #[serde(rename = "liveVolume")]
385    pub live_volume: i64,
386    #[serde(rename = "totalVolume")]
387    pub total_volume: i64,
388    #[serde(rename = "isActive")]
389    pub is_active: bool,
390    #[serde(rename = "createdAt")]
391    pub created_at: String,
392    #[serde(rename = "updatedAt")]
393    pub updated_at: String,
394}
395
396#[derive(Debug, Clone, Serialize, Deserialize)]
397pub struct RegionCluster {
398    pub id: i64,
399    #[serde(rename = "exportId")]
400    pub export_id: String,
401    #[serde(rename = "regionId")]
402    pub region_id: i64,
403    pub name: String,
404    #[serde(rename = "defaultCluster")]
405    pub default_cluster: bool,
406    #[serde(rename = "isReady")]
407    pub is_ready: bool,
408    #[serde(rename = "isActive")]
409    pub is_active: bool,
410    #[serde(rename = "createdAt")]
411    pub created_at: String,
412    #[serde(rename = "updatedAt")]
413    pub updated_at: String,
414}
415
416#[derive(Debug, Clone, Serialize, Deserialize)]
417pub struct Storage {
418    pub id: i64,
419    pub uuid: String,
420    pub account: Ref,
421    #[serde(rename = "regionInfo")]
422    pub region_info: Ref,
423    pub name: String,
424    #[serde(skip_serializing_if = "Option::is_none")]
425    pub description: Option<String>,
426    #[serde(rename = "storageType")]
427    pub storage_type: String,
428    #[serde(rename = "providerType")]
429    pub provider_type: String,
430    pub endpoint: String,
431    #[serde(skip_serializing_if = "Option::is_none")]
432    pub region: Option<String>,
433    #[serde(skip_serializing_if = "Option::is_none")]
434    pub bucket: Option<String>,
435    #[serde(skip_serializing_if = "Option::is_none")]
436    pub base: Option<String>,
437    #[serde(rename = "physicalFingerprint", skip_serializing_if = "Option::is_none")]
438    pub physical_fingerprint: Option<String>,
439    #[serde(rename = "blockRegion", skip_serializing_if = "Option::is_none")]
440    pub block_region: Option<String>,
441    #[serde(rename = "blockSize", skip_serializing_if = "Option::is_none")]
442    pub block_size: Option<i32>,
443    #[serde(rename = "directAccess", skip_serializing_if = "Option::is_none")]
444    pub direct_access: Option<bool>,
445    #[serde(rename = "isActive")]
446    pub is_active: bool,
447    #[serde(rename = "createdAt")]
448    pub created_at: String,
449    #[serde(rename = "updatedAt")]
450    pub updated_at: String,
451}
452
453#[derive(Debug, Clone, Serialize, Deserialize)]
454pub struct BlockVolume {
455    pub id: String,
456    #[serde(skip_serializing_if = "Option::is_none")]
457    pub name: Option<String>,
458    #[serde(rename = "clusterName", skip_serializing_if = "Option::is_none")]
459    pub cluster_name: Option<String>,
460    #[serde(rename = "clusterUuid", skip_serializing_if = "Option::is_none")]
461    pub cluster_uuid: Option<String>,
462    #[serde(rename = "shardId")]
463    pub shard_id: i64,
464    #[serde(rename = "regionClusterId")]
465    pub region_cluster_id: i64,
466    #[serde(rename = "clusterReady")]
467    pub cluster_ready: bool,
468    #[serde(rename = "isActive")]
469    pub is_active: bool,
470    #[serde(rename = "createdAt")]
471    pub created_at: String,
472    #[serde(rename = "updatedAt")]
473    pub updated_at: String,
474    #[serde(rename = "memberState", skip_serializing_if = "Option::is_none")]
475    pub member_state: Option<String>,
476    #[serde(rename = "pairId", skip_serializing_if = "Option::is_none")]
477    pub pair_id: Option<String>,
478}
479
480#[derive(Debug, Clone, Serialize, Deserialize)]
481pub struct UpdateConfigResult {
482    pub id: String,
483    #[serde(rename = "targetK")]
484    pub target_k: i32,
485    #[serde(rename = "activePairCountBefore")]
486    pub active_pair_count_before: i32,
487    #[serde(rename = "pairsNeeded")]
488    pub pairs_needed: i32,
489    #[serde(rename = "pairsFormed")]
490    pub pairs_formed: i32,
491    #[serde(rename = "activePairCountAfter")]
492    pub active_pair_count_after: i32,
493    pub partial: bool,
494    #[serde(skip_serializing_if = "Option::is_none")]
495    pub reason: Option<String>,
496}
497
498#[derive(Debug, Clone, Serialize, Deserialize)]
499pub struct Pair {
500    pub id: String,
501    #[serde(rename = "storageId")]
502    pub storage_id: String,
503    pub state: PairState,
504    #[serde(rename = "memberA", skip_serializing_if = "Option::is_none")]
505    pub member_a: Option<String>,
506    #[serde(rename = "memberB", skip_serializing_if = "Option::is_none")]
507    pub member_b: Option<String>,
508    #[serde(rename = "placementGroupA", skip_serializing_if = "Option::is_none")]
509    pub placement_group_a: Option<i64>,
510    #[serde(rename = "placementGroupB", skip_serializing_if = "Option::is_none")]
511    pub placement_group_b: Option<i64>,
512    #[serde(rename = "drainStartedAt", skip_serializing_if = "Option::is_none")]
513    pub drain_started_at: Option<String>,
514    #[serde(rename = "syncedAt", skip_serializing_if = "Option::is_none")]
515    pub synced_at: Option<String>,
516    #[serde(rename = "retiredAt", skip_serializing_if = "Option::is_none")]
517    pub retired_at: Option<String>,
518    #[serde(rename = "pendingSyncJobsA", skip_serializing_if = "Option::is_none")]
519    pub pending_sync_jobs_a: Option<i32>,
520    #[serde(rename = "pendingSyncJobsB", skip_serializing_if = "Option::is_none")]
521    pub pending_sync_jobs_b: Option<i32>,
522}
523
524#[derive(Debug, Clone, Serialize, Deserialize)]
525pub struct PoolMember {
526    pub id: String,
527    pub name: String,
528    #[serde(rename = "regionId")]
529    pub region_id: i64,
530    #[serde(rename = "regionClusterId")]
531    pub region_cluster_id: i64,
532    #[serde(rename = "memberState")]
533    pub member_state: String,
534}
535
536#[derive(Debug, Clone, Serialize, Deserialize)]
537pub struct Volume {
538    pub id: i64,
539    pub account: Ref,
540    pub storage: Ref,
541    pub region: Ref,
542    #[serde(rename = "regionCluster", skip_serializing_if = "Option::is_none")]
543    pub region_cluster: Option<Ref>,
544    pub name: String,
545    #[serde(skip_serializing_if = "Option::is_none")]
546    pub description: Option<String>,
547    #[serde(rename = "volumeType")]
548    pub volume_type: String,
549    #[serde(rename = "storageType", skip_serializing_if = "Option::is_none")]
550    pub storage_type: Option<String>,
551    pub encryption: bool,
552    #[serde(rename = "quotaLimit")]
553    pub quota_limit: i64,
554    #[serde(rename = "liveVolume")]
555    pub live_volume: i64,
556    #[serde(rename = "totalVolume")]
557    pub total_volume: i64,
558    #[serde(rename = "pendingVolume")]
559    pub pending_volume: i64,
560    #[serde(rename = "liveInactiveVolume")]
561    pub live_inactive_volume: i64,
562    pub locked: bool,
563    pub retention: VolumeRetentionPolicy,
564    pub versioning: VolumeVersioningPolicy,
565    pub compaction: String,
566    #[serde(rename = "isActive")]
567    pub is_active: bool,
568    #[serde(rename = "isCleanupMetaEnabled")]
569    pub is_cleanup_meta_enabled: bool,
570    #[serde(rename = "isCleanupStorageEnabled")]
571    pub is_cleanup_storage_enabled: bool,
572    #[serde(rename = "isCleanupVaultEnabled")]
573    pub is_cleanup_vault_enabled: bool,
574    #[serde(rename = "createdAt")]
575    pub created_at: String,
576    #[serde(rename = "updatedAt")]
577    pub updated_at: String,
578}
579
580#[derive(Debug, Clone, Serialize, Deserialize)]
581pub struct Fork {
582    pub fid: i32,
583    pub name: String,
584    #[serde(rename = "parentFid")]
585    pub parent_fid: i32,
586    #[serde(rename = "parentName")]
587    pub parent_name: String,
588    #[serde(rename = "snapshotTs")]
589    pub snapshot_ts: i64,
590    #[serde(rename = "createdBy", skip_serializing_if = "Option::is_none")]
591    pub created_by: Option<i64>,
592    #[serde(rename = "createdAt")]
593    pub created_at: i64,
594    #[serde(rename = "childrenCount")]
595    pub children_count: i32,
596    #[serde(skip_serializing_if = "Option::is_none")]
597    pub inactive: Option<bool>,
598    #[serde(rename = "inactiveAt", skip_serializing_if = "Option::is_none")]
599    pub inactive_at: Option<i64>,
600    pub status: String,
601    pub size: i64,
602}
603
604#[derive(Debug, Clone, Serialize, Deserialize)]
605pub struct ForkTreeEntry {
606    pub inode: i64,
607    pub name: String,
608    pub kind: String,
609    pub size: i64,
610    pub mtime: i64,
611    pub ctime: i64,
612    #[serde(rename = "creatorId", skip_serializing_if = "Option::is_none")]
613    pub creator_id: Option<i64>,
614    #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
615    pub updater_id: Option<i64>,
616}
617
618#[derive(Debug, Clone, Serialize, Deserialize)]
619pub struct ForkEntryDetail {
620    pub inode: i64,
621    pub path: String,
622    pub name: String,
623    pub kind: String,
624    pub size: i64,
625    pub mtime: i64,
626    pub ctime: i64,
627    pub generation: i64,
628    #[serde(skip_serializing_if = "Option::is_none")]
629    pub owner: Option<String>,
630    #[serde(skip_serializing_if = "Option::is_none")]
631    pub mode: Option<i32>,
632    #[serde(skip_serializing_if = "Option::is_none")]
633    pub xattrs: Option<serde_json::Value>,
634    #[serde(rename = "creatorId", skip_serializing_if = "Option::is_none")]
635    pub creator_id: Option<i64>,
636    #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
637    pub updater_id: Option<i64>,
638}
639
640#[derive(Debug, Clone, Serialize, Deserialize)]
641pub struct ForkEntryVersion {
642    pub generation: i64,
643    pub size: i64,
644    pub mtime: i64,
645    #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
646    pub updater_id: Option<i64>,
647    #[serde(rename = "contentHash", skip_serializing_if = "Option::is_none")]
648    pub content_hash: Option<String>,
649}
650
651#[derive(Debug, Clone, Serialize, Deserialize)]
652pub struct ForkTreeMatch {
653    pub path: String,
654    pub inode: i64,
655    pub kind: String,
656    pub size: i64,
657    pub mtime: i64,
658}
659
660#[derive(Debug, Clone, Serialize, Deserialize)]
661pub struct AuditLog {
662    pub id: i64,
663    pub title: String,
664    #[serde(skip_serializing_if = "Option::is_none")]
665    pub description: Option<String>,
666    #[serde(skip_serializing_if = "Option::is_none")]
667    pub subject: Option<String>,
668    pub success: bool,
669    #[serde(skip_serializing_if = "Option::is_none")]
670    pub data: Option<serde_json::Value>,
671    #[serde(rename = "createdBy", skip_serializing_if = "Option::is_none")]
672    pub created_by: Option<String>,
673    #[serde(skip_serializing_if = "Option::is_none")]
674    pub node: Option<String>,
675    #[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
676    pub account_id: Option<i64>,
677    #[serde(rename = "regionId", skip_serializing_if = "Option::is_none")]
678    pub region_id: Option<i64>,
679    #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
680    pub region_cluster_id: Option<i64>,
681    #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
682    pub created_at: Option<String>,
683    #[serde(rename = "updatedAt", skip_serializing_if = "Option::is_none")]
684    pub updated_at: Option<String>,
685}
686
687#[derive(Debug, Clone, Serialize, Deserialize)]
688pub struct ServiceNode {
689    pub id: i64,
690    #[serde(rename = "regionId")]
691    pub region_id: i64,
692    #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
693    pub region_cluster_id: Option<i64>,
694    #[serde(rename = "serviceType")]
695    pub service_type: String,
696    #[serde(rename = "nodeId")]
697    pub node_id: String,
698    #[serde(rename = "advertiseAddr")]
699    pub advertise_addr: String,
700    #[serde(rename = "rpcAddr", skip_serializing_if = "Option::is_none")]
701    pub rpc_addr: Option<String>,
702    #[serde(skip_serializing_if = "Option::is_none")]
703    pub metadata: Option<serde_json::Value>,
704    #[serde(rename = "metricsEndpoint", skip_serializing_if = "Option::is_none")]
705    pub metrics_endpoint: Option<String>,
706    #[serde(rename = "instanceId", skip_serializing_if = "Option::is_none")]
707    pub instance_id: Option<String>,
708    #[serde(rename = "instanceInfo", skip_serializing_if = "Option::is_none")]
709    pub instance_info: Option<serde_json::Value>,
710    pub status: String,
711    #[serde(rename = "lastHeartbeat", skip_serializing_if = "Option::is_none")]
712    pub last_heartbeat: Option<i64>,
713    #[serde(rename = "isActive")]
714    pub is_active: bool,
715    #[serde(rename = "memUsage", skip_serializing_if = "Option::is_none")]
716    pub mem_usage: Option<f64>,
717    #[serde(rename = "sysLoad", skip_serializing_if = "Option::is_none")]
718    pub sys_load: Option<i64>,
719    #[serde(rename = "binaryVersion", skip_serializing_if = "Option::is_none")]
720    pub binary_version: Option<i32>,
721}
722
723#[derive(Debug, Clone, Serialize, Deserialize)]
724pub struct ClientSession {
725    pub id: i64,
726    pub account: Ref,
727    pub region: Ref,
728    #[serde(rename = "regionCluster", skip_serializing_if = "Option::is_none")]
729    pub region_cluster: Option<Ref>,
730    pub volume: VolumeRef,
731    #[serde(skip_serializing_if = "Option::is_none")]
732    pub user: Option<Ref>,
733    #[serde(rename = "clientType")]
734    pub client_type: String,
735    #[serde(rename = "osName")]
736    pub os_name: String,
737    #[serde(rename = "osVersion", skip_serializing_if = "Option::is_none")]
738    pub os_version: Option<String>,
739    #[serde(rename = "appVersion", skip_serializing_if = "Option::is_none")]
740    pub app_version: Option<String>,
741    #[serde(skip_serializing_if = "Option::is_none")]
742    pub hostname: Option<String>,
743    #[serde(rename = "ipAddr")]
744    pub ip_addr: String,
745    #[serde(rename = "mountMode", skip_serializing_if = "Option::is_none")]
746    pub mount_mode: Option<String>,
747    #[serde(rename = "mountPath", skip_serializing_if = "Option::is_none")]
748    pub mount_path: Option<String>,
749    #[serde(rename = "forkName", skip_serializing_if = "Option::is_none")]
750    pub fork_name: Option<String>,
751    #[serde(rename = "isTemporaryFork")]
752    pub is_temporary_fork: bool,
753    #[serde(skip_serializing_if = "Option::is_none")]
754    pub metadata: Option<serde_json::Value>,
755    #[serde(skip_serializing_if = "Option::is_none")]
756    pub metrics: Option<serde_json::Value>,
757    pub status: ClientSessionStatus,
758    #[serde(rename = "lastHeartbeat", skip_serializing_if = "Option::is_none")]
759    pub last_heartbeat: Option<i64>,
760    #[serde(rename = "connectedAt", skip_serializing_if = "Option::is_none")]
761    pub connected_at: Option<i64>,
762    #[serde(rename = "disconnectedAt", skip_serializing_if = "Option::is_none")]
763    pub disconnected_at: Option<i64>,
764    #[serde(rename = "isActive")]
765    pub is_active: bool,
766}
767
768#[derive(Debug, Clone, Serialize, Deserialize)]
769pub struct SessionSummary {
770    #[serde(rename = "byStatus")]
771    pub by_status: Vec<SessionSummaryStatusEntry>,
772    #[serde(rename = "byPlatform")]
773    pub by_platform: Vec<SessionSummaryFacet>,
774    #[serde(rename = "byOsName")]
775    pub by_os_name: Vec<SessionSummaryFacet>,
776    #[serde(rename = "regionCount")]
777    pub region_count: i64,
778    #[serde(rename = "volumeCount")]
779    pub volume_count: i64,
780    #[serde(rename = "hostCount")]
781    pub host_count: i64,
782    #[serde(rename = "degradedCount")]
783    pub degraded_count: i64,
784}
785
786#[derive(Debug, Clone, Serialize, Deserialize)]
787pub struct DiscoverMetaResponse {
788    #[serde(rename = "regionId")]
789    pub region_id: i64,
790    pub region: String,
791    pub endpoints: Vec<DiscoverEndpoint>,
792}
793
794#[derive(Debug, Clone, Serialize, Deserialize)]
795pub struct MetricsTarget {
796    pub targets: Vec<String>,
797    pub labels: serde_json::Value,
798}
799
800#[derive(Debug, Clone, Serialize, Deserialize)]
801pub struct MetricsTokenResponse {
802    pub token: String,
803}
804
805#[derive(Debug, Clone, Serialize, Deserialize)]
806pub struct DashboardStats {
807    #[serde(rename = "userCount")]
808    pub user_count: i64,
809    #[serde(rename = "volumeCount")]
810    pub volume_count: i64,
811    #[serde(rename = "regionCount")]
812    pub region_count: i64,
813    #[serde(rename = "storageCount")]
814    pub storage_count: i64,
815    #[serde(rename = "totalVolumeUsed")]
816    pub total_volume_used: i64,
817    #[serde(rename = "totalQuotaLimit")]
818    pub total_quota_limit: i64,
819    #[serde(rename = "activeSessionCount")]
820    pub active_session_count: i64,
821    #[serde(rename = "regionBreakdown")]
822    pub region_breakdown: Vec<RegionVolumeMetrics>,
823}
824
825#[derive(Debug, Clone, Serialize, Deserialize)]
826pub struct LicenseDetails {
827    #[serde(rename = "licenseId")]
828    pub license_id: String,
829    pub licensee: String,
830    pub contact: String,
831    #[serde(rename = "licenseType")]
832    pub license_type: String,
833    #[serde(rename = "issuedAt")]
834    pub issued_at: String,
835    #[serde(rename = "expiresAt")]
836    pub expires_at: String,
837    #[serde(rename = "gracePeriodDays")]
838    pub grace_period_days: i64,
839    #[serde(rename = "expiredAccessDays")]
840    pub expired_access_days: i64,
841    #[serde(rename = "maxNodes")]
842    pub max_nodes: i64,
843    #[serde(rename = "maxVolumes")]
844    pub max_volumes: i64,
845    #[serde(rename = "maxUsers")]
846    pub max_users: i64,
847    #[serde(rename = "maxAccounts")]
848    pub max_accounts: i64,
849    #[serde(rename = "maxRegions")]
850    pub max_regions: i64,
851    #[serde(rename = "maxStorageBytes")]
852    pub max_storage_bytes: i64,
853    pub status: LicenseStatus,
854    #[serde(rename = "daysRemaining")]
855    pub days_remaining: i64,
856    #[serde(rename = "graceEndsAt")]
857    pub grace_ends_at: String,
858    #[serde(rename = "graceDaysLeft")]
859    pub grace_days_left: i64,
860    #[serde(rename = "expiredAccessEndsAt")]
861    pub expired_access_ends_at: String,
862    #[serde(rename = "expiredAccessDaysLeft")]
863    pub expired_access_days_left: i64,
864    pub quota: LicenseQuota,
865    #[serde(skip_serializing_if = "Option::is_none")]
866    pub distribution: Option<String>,
867    #[serde(rename = "distributionRef", skip_serializing_if = "Option::is_none")]
868    pub distribution_ref: Option<Vec<String>>,
869    #[serde(rename = "unlimitedStorage", skip_serializing_if = "Option::is_none")]
870    pub unlimited_storage: Option<bool>,
871}
872
873#[derive(Debug, Clone, Serialize, Deserialize)]
874pub struct LicenseTerms {
875    pub terms: String,
876}
877
878#[derive(Debug, Clone, Serialize, Deserialize)]
879pub struct LicenseLoadResult {
880    pub loaded: i64,
881    pub ignored: i64,
882}
883
884#[derive(Debug, Clone, Serialize, Deserialize)]
885pub struct LicenseList {
886    pub items: Vec<LicenseRecord>,
887}
888
889#[derive(Debug, Clone, Serialize, Deserialize)]
890pub struct ServiceAlert {
891    pub id: i64,
892    #[serde(rename = "alertId")]
893    pub alert_id: String,
894    pub source: String,
895    #[serde(rename = "nodeId")]
896    pub node_id: String,
897    pub severity: i64,
898    pub category: String,
899    pub title: String,
900    #[serde(skip_serializing_if = "Option::is_none")]
901    pub description: Option<String>,
902    #[serde(skip_serializing_if = "Option::is_none")]
903    pub region: Option<Ref>,
904    #[serde(skip_serializing_if = "Option::is_none")]
905    pub account: Option<Ref>,
906    #[serde(rename = "eventTime")]
907    pub event_time: String,
908    #[serde(rename = "resolvedAt", skip_serializing_if = "Option::is_none")]
909    pub resolved_at: Option<String>,
910    #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
911    pub created_at: Option<String>,
912}
913
914#[derive(Debug, Clone, Serialize, Deserialize)]
915pub struct AlertCountResponse {
916    pub active: i64,
917    pub recent: i64,
918    #[serde(rename = "infoCount")]
919    pub info_count: i64,
920    #[serde(rename = "warningCount")]
921    pub warning_count: i64,
922    #[serde(rename = "criticalCount")]
923    pub critical_count: i64,
924}
925
926#[derive(Debug, Clone, Serialize, Deserialize)]
927pub struct RegionAlert {
928    pub id: i64,
929    #[serde(rename = "alertId")]
930    pub alert_id: String,
931    pub source: String,
932    #[serde(rename = "nodeId")]
933    pub node_id: String,
934    #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
935    pub region_cluster_id: Option<i64>,
936    pub severity: i64,
937    pub category: String,
938    pub title: String,
939    #[serde(skip_serializing_if = "Option::is_none")]
940    pub description: Option<String>,
941    #[serde(rename = "eventTime")]
942    pub event_time: String,
943    #[serde(rename = "resolvedAt", skip_serializing_if = "Option::is_none")]
944    pub resolved_at: Option<String>,
945    #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
946    pub created_at: Option<String>,
947}
948
949#[derive(Debug, Clone, Serialize, Deserialize)]
950pub struct GCWorkerEvent {
951    pub id: i64,
952    #[serde(rename = "nodeId")]
953    pub node_id: String,
954    #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
955    pub region_cluster_id: Option<i64>,
956    pub goal: String,
957    #[serde(skip_serializing_if = "Option::is_none")]
958    pub sid: Option<i64>,
959    #[serde(skip_serializing_if = "Option::is_none")]
960    pub subject: Option<String>,
961    pub ops: serde_json::Value,
962    #[serde(rename = "durationMs")]
963    pub duration_ms: i64,
964    #[serde(rename = "eventTime")]
965    pub event_time: String,
966    #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
967    pub created_at: Option<String>,
968}
969
970#[derive(Debug, Clone, Serialize, Deserialize)]
971pub struct GCWorkerEventHistogramResponse {
972    pub buckets: Vec<GCWorkerEventBucket>,
973}
974
975#[derive(Debug, Clone, Serialize, Deserialize)]
976pub struct GCWorkerEventGoalsResponse {
977    pub goals: Vec<String>,
978}
979
980#[derive(Debug, Clone, Serialize, Deserialize)]
981pub struct BackfillFailure {
982    #[serde(rename = "shardId")]
983    pub shard_id: i64,
984    pub error: String,
985}
986
987#[derive(Debug, Clone, Serialize, Deserialize)]
988pub struct BlockMember {
989    #[serde(skip_serializing_if = "Option::is_none")]
990    pub name: Option<String>,
991    #[serde(rename = "regionClusterId")]
992    pub region_cluster_id: i64,
993}
994
995#[derive(Debug, Clone, Serialize, Deserialize)]
996pub struct CompatibleStorage {
997    pub id: i64,
998    pub uuid: String,
999    pub name: String,
1000    #[serde(rename = "storageType")]
1001    pub storage_type: String,
1002    #[serde(rename = "providerType")]
1003    pub provider_type: String,
1004    pub volumes: Vec<CompatibleVolume>,
1005}
1006
1007#[derive(Debug, Clone, Serialize, Deserialize)]
1008pub struct CompatibleVolume {
1009    pub id: String,
1010    pub name: String,
1011}
1012
1013#[derive(Debug, Clone, Serialize, Deserialize)]
1014pub struct DashboardUser {
1015    pub id: String,
1016    pub name: String,
1017    #[serde(skip_serializing_if = "Option::is_none")]
1018    pub email: Option<String>,
1019    pub role: String,
1020    #[serde(skip_serializing_if = "Option::is_none")]
1021    pub username: Option<String>,
1022    #[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
1023    pub account_id: Option<i64>,
1024    #[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
1025    pub user_id: Option<i64>,
1026    #[serde(rename = "volumeId", skip_serializing_if = "Option::is_none")]
1027    pub volume_id: Option<i64>,
1028    #[serde(skip_serializing_if = "Option::is_none")]
1029    pub exp: Option<i64>,
1030}
1031
1032#[derive(Debug, Clone, Serialize, Deserialize)]
1033pub struct DiscoverEndpoint {
1034    #[serde(rename = "nodeId")]
1035    pub node_id: String,
1036    pub addr: String,
1037    pub status: String,
1038}
1039
1040#[derive(Debug, Clone, Serialize, Deserialize)]
1041pub struct GCWorkerEventBucket {
1042    #[serde(rename = "bucketStart")]
1043    pub bucket_start: String,
1044    pub goal: String,
1045    pub count: i64,
1046}
1047
1048#[derive(Debug, Clone, Serialize, Deserialize)]
1049pub struct LicenseQuota {
1050    pub state: LicenseQuotaState,
1051    #[serde(rename = "liveVolume")]
1052    pub live_volume: i64,
1053    #[serde(rename = "totalVolume")]
1054    pub total_volume: i64,
1055    pub generation: i64,
1056    #[serde(rename = "lastTransitionAtMs")]
1057    pub last_transition_at_ms: i64,
1058}
1059
1060#[derive(Debug, Clone, Serialize, Deserialize)]
1061pub struct LicenseRecord {
1062    pub key: String,
1063    pub licensee: String,
1064    pub status: LicenseStatus,
1065    #[serde(rename = "issuedAt")]
1066    pub issued_at: String,
1067    #[serde(rename = "expiresAt")]
1068    pub expires_at: String,
1069    #[serde(rename = "maxStorageBytes")]
1070    pub max_storage_bytes: i64,
1071    #[serde(rename = "insertedAt")]
1072    pub inserted_at: String,
1073}
1074
1075#[derive(Debug, Clone, Serialize, Deserialize)]
1076pub struct MoveVolumeFailure {
1077    #[serde(rename = "volumeId")]
1078    pub volume_id: String,
1079    pub error: String,
1080}
1081
1082#[derive(Debug, Clone, Serialize, Deserialize)]
1083pub struct NodeStatsSample {
1084    #[serde(rename = "timestampMs")]
1085    pub timestamp_ms: i64,
1086    #[serde(rename = "intervalMs")]
1087    pub interval_ms: i64,
1088    #[serde(rename = "loadAvg1")]
1089    pub load_avg1: f64,
1090    #[serde(rename = "loadAvg5")]
1091    pub load_avg5: f64,
1092    #[serde(rename = "loadAvg15")]
1093    pub load_avg15: f64,
1094    #[serde(rename = "memUsage")]
1095    pub mem_usage: f64,
1096    #[serde(rename = "readIops")]
1097    pub read_iops: f64,
1098    #[serde(rename = "writeIops")]
1099    pub write_iops: f64,
1100    #[serde(rename = "netRxBytesPerSec")]
1101    pub net_rx_bytes_per_sec: f64,
1102    #[serde(rename = "netTxBytesPerSec")]
1103    pub net_tx_bytes_per_sec: f64,
1104    #[serde(rename = "processCount")]
1105    pub process_count: i64,
1106    #[serde(rename = "diskUsedBytes", skip_serializing_if = "Option::is_none")]
1107    pub disk_used_bytes: Option<i64>,
1108    #[serde(rename = "diskTotalBytes", skip_serializing_if = "Option::is_none")]
1109    pub disk_total_bytes: Option<i64>,
1110    #[serde(rename = "dbLatency1mUs", skip_serializing_if = "Option::is_none")]
1111    pub db_latency1m_us: Option<f64>,
1112    #[serde(rename = "dbLatency5mUs", skip_serializing_if = "Option::is_none")]
1113    pub db_latency5m_us: Option<f64>,
1114    #[serde(rename = "dbLatency15mUs", skip_serializing_if = "Option::is_none")]
1115    pub db_latency15m_us: Option<f64>,
1116    #[serde(rename = "dbQueriesPerSec", skip_serializing_if = "Option::is_none")]
1117    pub db_queries_per_sec: Option<f64>,
1118    #[serde(rename = "dbConnsInUse", skip_serializing_if = "Option::is_none")]
1119    pub db_conns_in_use: Option<i64>,
1120    #[serde(rename = "dbConnsMax", skip_serializing_if = "Option::is_none")]
1121    pub db_conns_max: Option<i64>,
1122    #[serde(rename = "dbConnsIdle", skip_serializing_if = "Option::is_none")]
1123    pub db_conns_idle: Option<i64>,
1124    #[serde(rename = "dbConnsFree", skip_serializing_if = "Option::is_none")]
1125    pub db_conns_free: Option<i64>,
1126    #[serde(rename = "dbConnsInUse1m", skip_serializing_if = "Option::is_none")]
1127    pub db_conns_in_use1m: Option<f64>,
1128    #[serde(rename = "dbConnsInUse5m", skip_serializing_if = "Option::is_none")]
1129    pub db_conns_in_use5m: Option<f64>,
1130    #[serde(rename = "dbConnsInUse15m", skip_serializing_if = "Option::is_none")]
1131    pub db_conns_in_use15m: Option<f64>,
1132    #[serde(rename = "dbPingAvgUs", skip_serializing_if = "Option::is_none")]
1133    pub db_ping_avg_us: Option<f64>,
1134    #[serde(rename = "dbPingMinUs", skip_serializing_if = "Option::is_none")]
1135    pub db_ping_min_us: Option<f64>,
1136    #[serde(rename = "dbPingMaxUs", skip_serializing_if = "Option::is_none")]
1137    pub db_ping_max_us: Option<f64>,
1138    #[serde(rename = "dbPingStdDevUs", skip_serializing_if = "Option::is_none")]
1139    pub db_ping_std_dev_us: Option<f64>,
1140}
1141
1142#[derive(Debug, Clone, Serialize, Deserialize)]
1143pub struct Ref {
1144    pub id: i64,
1145    pub name: String,
1146}
1147
1148#[derive(Debug, Clone, Serialize, Deserialize)]
1149pub struct RegionVolumeMetrics {
1150    #[serde(rename = "regionId")]
1151    pub region_id: i64,
1152    #[serde(rename = "regionName")]
1153    pub region_name: String,
1154    #[serde(rename = "volumeCount")]
1155    pub volume_count: i64,
1156    #[serde(rename = "totalVolumeUsed")]
1157    pub total_volume_used: i64,
1158    #[serde(rename = "totalQuotaLimit")]
1159    pub total_quota_limit: i64,
1160}
1161
1162#[derive(Debug, Clone, Serialize, Deserialize)]
1163pub struct RetentionPolicy {
1164    #[serde(rename = "clientSessionDays", skip_serializing_if = "Option::is_none")]
1165    pub client_session_days: Option<i32>,
1166}
1167
1168#[derive(Debug, Clone, Serialize, Deserialize)]
1169pub struct SessionSummaryFacet {
1170    pub label: String,
1171    pub count: i64,
1172}
1173
1174#[derive(Debug, Clone, Serialize, Deserialize)]
1175pub struct SessionSummaryStatusEntry {
1176    #[serde(rename = "clientType")]
1177    pub client_type: String,
1178    pub status: String,
1179    pub count: i64,
1180}
1181
1182#[derive(Debug, Clone, Serialize, Deserialize)]
1183pub struct UserLite {
1184    pub id: i64,
1185    pub username: String,
1186    pub name: String,
1187}
1188
1189#[derive(Debug, Clone, Serialize, Deserialize)]
1190pub struct VolumeApiKey {
1191    #[serde(rename = "apiKey")]
1192    pub api_key: String,
1193    #[serde(skip_serializing_if = "Option::is_none")]
1194    pub name: Option<String>,
1195    #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
1196    pub created_at: Option<String>,
1197    #[serde(rename = "lastUsedAt", skip_serializing_if = "Option::is_none")]
1198    pub last_used_at: Option<String>,
1199}
1200
1201#[derive(Debug, Clone, Serialize, Deserialize)]
1202pub struct VolumeRef {
1203    pub id: i64,
1204    pub name: String,
1205    #[serde(skip_serializing_if = "Option::is_none")]
1206    pub r#type: Option<String>,
1207}
1208
1209#[derive(Debug, Clone, Serialize, Deserialize)]
1210pub struct VolumeRetentionPolicy {
1211    #[serde(rename = "dataDays", skip_serializing_if = "Option::is_none")]
1212    pub data_days: Option<i32>,
1213    #[serde(rename = "graceDays", skip_serializing_if = "Option::is_none")]
1214    pub grace_days: Option<i32>,
1215    #[serde(rename = "forkGraceDays", skip_serializing_if = "Option::is_none")]
1216    pub fork_grace_days: Option<i32>,
1217    #[serde(rename = "eventLogDays", skip_serializing_if = "Option::is_none")]
1218    pub event_log_days: Option<i32>,
1219}
1220
1221#[derive(Debug, Clone, Serialize, Deserialize)]
1222pub struct VolumeSizePoint {
1223    #[serde(rename = "bucketEnd")]
1224    pub bucket_end: String,
1225    #[serde(rename = "liveVolume")]
1226    pub live_volume: i64,
1227    #[serde(rename = "totalVolume")]
1228    pub total_volume: i64,
1229    #[serde(rename = "pendingVolume")]
1230    pub pending_volume: i64,
1231    #[serde(rename = "liveInactiveVolume")]
1232    pub live_inactive_volume: i64,
1233}
1234
1235#[derive(Debug, Clone, Serialize, Deserialize)]
1236pub struct VolumeVersioningPolicy {
1237    #[serde(rename = "contentWindowSeconds", skip_serializing_if = "Option::is_none")]
1238    pub content_window_seconds: Option<i32>,
1239}
1240
1241// Accounts
1242
1243#[derive(Debug, Clone, Serialize)]
1244pub struct CreateAccountRequest {
1245    pub name: String,
1246    #[serde(skip_serializing_if = "Option::is_none")]
1247    pub description: Option<String>,
1248    #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
1249    pub icon_url: Option<String>,
1250    #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
1251    pub provider_info: Option<serde_json::Value>,
1252}
1253
1254#[derive(Debug, Clone, Serialize)]
1255pub struct EditAccountRequest {
1256    pub name: String,
1257    #[serde(skip_serializing_if = "Option::is_none")]
1258    pub description: Option<String>,
1259    #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
1260    pub icon_url: Option<String>,
1261    #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
1262    pub provider_info: Option<serde_json::Value>,
1263    #[serde(skip_serializing_if = "Option::is_none")]
1264    pub retention: Option<RetentionPolicy>,
1265}
1266
1267#[derive(Debug, Clone, Serialize)]
1268pub struct UpdateAccountQuotaRequest {
1269    #[serde(rename = "quotaLimit")]
1270    pub quota_limit: i64,
1271    #[serde(rename = "quotaExcessPct", skip_serializing_if = "Option::is_none")]
1272    pub quota_excess_pct: Option<i32>,
1273}
1274
1275#[derive(Debug, Clone, Default)]
1276pub struct AccountListOptions {
1277    pub is_active: Option<bool>,
1278    pub page: Option<i64>,
1279    pub limit: Option<i64>,
1280}
1281
1282// Users
1283
1284#[derive(Debug, Clone, Serialize)]
1285pub struct AddUserRequest {
1286    #[serde(rename = "accountId")]
1287    pub account_id: i64,
1288    pub username: String,
1289    pub email: String,
1290    #[serde(skip_serializing_if = "Option::is_none")]
1291    pub name: Option<String>,
1292    #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
1293    pub provider_info: Option<serde_json::Value>,
1294}
1295
1296#[derive(Debug, Clone, Serialize)]
1297pub struct BulkUserRequest {
1298    pub ids: Vec<i64>,
1299}
1300
1301#[derive(Debug, Clone, Serialize, Deserialize)]
1302pub struct BulkUserResponse {
1303    pub users: Vec<UserLite>,
1304}
1305
1306#[derive(Debug, Clone, Serialize)]
1307pub struct EditUserRequest {
1308    pub username: String,
1309    pub email: String,
1310    #[serde(skip_serializing_if = "Option::is_none")]
1311    pub name: Option<String>,
1312    #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
1313    pub provider_info: Option<serde_json::Value>,
1314}
1315
1316#[derive(Debug, Clone, Default)]
1317pub struct UserListOptions {
1318    pub account_id: i64,
1319    pub search: Option<String>,
1320    pub is_active: Option<bool>,
1321    pub page: Option<i64>,
1322    pub limit: Option<i64>,
1323}
1324
1325// Regions
1326
1327#[derive(Debug, Clone, Serialize)]
1328pub struct CreateRegionRequest {
1329    #[serde(rename = "accountId")]
1330    pub account_id: i64,
1331    pub name: String,
1332}
1333
1334#[derive(Debug, Clone, Serialize)]
1335pub struct EditRegionRequest {
1336    #[serde(rename = "accountId")]
1337    pub account_id: i64,
1338    pub name: String,
1339}
1340
1341#[derive(Debug, Clone, Default)]
1342pub struct RegionListOptions {
1343    pub account_id: i64,
1344    pub is_active: Option<bool>,
1345    pub page: Option<i64>,
1346    pub limit: Option<i64>,
1347}
1348
1349// Clusters
1350
1351#[derive(Debug, Clone, Default)]
1352pub struct ClusterListOptions {
1353    pub account_id: i64,
1354    pub region_id: Option<i64>,
1355    pub is_active: Option<bool>,
1356    pub page: Option<i64>,
1357    pub limit: Option<i64>,
1358}
1359
1360// RegionClusters
1361
1362#[derive(Debug, Clone, Serialize)]
1363pub struct CreateRegionClusterRequest {
1364    pub name: String,
1365}
1366
1367#[derive(Debug, Clone, Serialize)]
1368pub struct EditRegionClusterRequest {
1369    pub name: String,
1370}
1371
1372#[derive(Debug, Clone, Serialize)]
1373pub struct SetRegionClusterReadyRequest {
1374    pub ready: bool,
1375}
1376
1377#[derive(Debug, Clone, Serialize, Deserialize)]
1378pub struct SetReadyRegionClusterResponse {
1379    pub id: i64,
1380    pub ready: bool,
1381}
1382
1383#[derive(Debug, Clone, Default)]
1384pub struct RegionClusterListOptions {
1385    pub is_active: Option<bool>,
1386    pub page: Option<i64>,
1387    pub limit: Option<i64>,
1388}
1389
1390// Storages
1391
1392#[derive(Debug, Clone, Serialize)]
1393pub struct CreateStorageRequest {
1394    #[serde(rename = "accountId")]
1395    pub account_id: i64,
1396    #[serde(rename = "regionId")]
1397    pub region_id: i64,
1398    pub name: String,
1399    #[serde(skip_serializing_if = "Option::is_none")]
1400    pub description: Option<String>,
1401    #[serde(rename = "storageType")]
1402    pub storage_type: String,
1403    #[serde(rename = "providerType")]
1404    pub provider_type: String,
1405    pub endpoint: String,
1406    #[serde(skip_serializing_if = "Option::is_none")]
1407    pub region: Option<String>,
1408    #[serde(skip_serializing_if = "Option::is_none")]
1409    pub bucket: Option<String>,
1410    #[serde(skip_serializing_if = "Option::is_none")]
1411    pub base: Option<String>,
1412    #[serde(rename = "blockRegion", skip_serializing_if = "Option::is_none")]
1413    pub block_region: Option<String>,
1414    #[serde(rename = "blockSize", skip_serializing_if = "Option::is_none")]
1415    pub block_size: Option<i32>,
1416    #[serde(skip_serializing_if = "Option::is_none")]
1417    pub members: Option<Vec<BlockMember>>,
1418    #[serde(rename = "accessKey", skip_serializing_if = "Option::is_none")]
1419    pub access_key: Option<String>,
1420    #[serde(rename = "secretKey", skip_serializing_if = "Option::is_none")]
1421    pub secret_key: Option<String>,
1422}
1423
1424#[derive(Debug, Clone, Serialize, Deserialize)]
1425pub struct CreateStorageResponse {
1426    pub id: i64,
1427    #[serde(rename = "blockVolumeIds", skip_serializing_if = "Option::is_none")]
1428    pub block_volume_ids: Option<Vec<String>>,
1429}
1430
1431#[derive(Debug, Clone, Serialize)]
1432pub struct EditStorageRequest {
1433    pub name: String,
1434    #[serde(skip_serializing_if = "Option::is_none")]
1435    pub description: Option<String>,
1436    #[serde(skip_serializing_if = "Option::is_none")]
1437    pub endpoint: Option<String>,
1438    #[serde(rename = "accessKey", skip_serializing_if = "Option::is_none")]
1439    pub access_key: Option<String>,
1440    #[serde(rename = "secretKey", skip_serializing_if = "Option::is_none")]
1441    pub secret_key: Option<String>,
1442    #[serde(rename = "directAccess", skip_serializing_if = "Option::is_none")]
1443    pub direct_access: Option<bool>,
1444}
1445
1446#[derive(Debug, Clone, Serialize)]
1447pub struct TestStorageNewBucketRequest {
1448    pub endpoint: String,
1449    #[serde(skip_serializing_if = "Option::is_none")]
1450    pub region: Option<String>,
1451    pub bucket: String,
1452    #[serde(rename = "accessKey")]
1453    pub access_key: String,
1454    #[serde(rename = "secretKey")]
1455    pub secret_key: String,
1456    #[serde(rename = "providerType", skip_serializing_if = "Option::is_none")]
1457    pub provider_type: Option<String>,
1458}
1459
1460#[derive(Debug, Clone, Serialize, Deserialize)]
1461pub struct TestNewBucketStorageResponse {
1462    #[serde(rename = "bucketExists")]
1463    pub bucket_exists: bool,
1464    pub list: bool,
1465    pub write: bool,
1466    pub read: bool,
1467    pub delete: bool,
1468    pub multipart: bool,
1469}
1470
1471#[derive(Debug, Clone, Serialize, Deserialize)]
1472pub struct TestStorageBucketStorageResponse {
1473    #[serde(rename = "bucketExists")]
1474    pub bucket_exists: bool,
1475    pub list: bool,
1476    pub write: bool,
1477    pub read: bool,
1478    pub delete: bool,
1479    pub multipart: bool,
1480}
1481
1482#[derive(Debug, Clone, Serialize, Deserialize)]
1483pub struct ListCompatibleStorageResponse {
1484    pub storages: Vec<CompatibleStorage>,
1485}
1486
1487#[derive(Debug, Clone, Serialize)]
1488pub struct MoveStorageVolumesRequest {
1489    #[serde(rename = "volumeIds")]
1490    pub volume_ids: Vec<String>,
1491}
1492
1493#[derive(Debug, Clone, Serialize, Deserialize)]
1494pub struct MoveVolumesStorageResponse {
1495    pub moved: Vec<String>,
1496    pub failures: Vec<MoveVolumeFailure>,
1497}
1498
1499#[derive(Debug, Clone, Serialize)]
1500pub struct UpdateStorageConfigRequest {
1501    pub k: i32,
1502}
1503
1504#[derive(Debug, Clone, Serialize, Deserialize)]
1505pub struct GetConfigStorageResponse {
1506    pub id: String,
1507    pub k: i32,
1508    #[serde(rename = "algorithmVersion")]
1509    pub algorithm_version: i32,
1510    #[serde(rename = "epochPolicyVersion")]
1511    pub epoch_policy_version: i32,
1512}
1513
1514#[derive(Debug, Clone, Serialize, Deserialize)]
1515pub struct DrainPairStorageResponse {
1516    pub id: String,
1517    pub state: String,
1518}
1519
1520#[derive(Debug, Clone, Serialize, Deserialize)]
1521pub struct CancelDrainStorageResponse {
1522    pub id: String,
1523    pub state: String,
1524}
1525
1526#[derive(Debug, Clone, Serialize)]
1527pub struct RegisterStorageMemberRequest {
1528    #[serde(rename = "regionClusterId")]
1529    pub region_cluster_id: i64,
1530    pub name: String,
1531}
1532
1533#[derive(Debug, Clone, Serialize, Deserialize)]
1534pub struct BackfillFingerprintsStorageResponse {
1535    pub scanned: i32,
1536    pub updated: i32,
1537    pub failures: Vec<BackfillFailure>,
1538    #[serde(rename = "hasMore")]
1539    pub has_more: bool,
1540}
1541
1542#[derive(Debug, Clone, Default)]
1543pub struct StorageListOptions {
1544    pub account_id: i64,
1545    pub search: Option<String>,
1546    pub region_id: Option<i64>,
1547    pub storage_type: Option<String>,
1548    pub provider_type: Option<String>,
1549    pub is_active: Option<bool>,
1550    pub direct_access: Option<bool>,
1551    pub page: Option<i64>,
1552    pub limit: Option<i64>,
1553}
1554
1555// Volumes
1556
1557#[derive(Debug, Clone, Serialize)]
1558pub struct CreateVolumeRequest {
1559    #[serde(rename = "accountId")]
1560    pub account_id: i64,
1561    #[serde(rename = "storageId")]
1562    pub storage_id: i64,
1563    pub name: String,
1564    #[serde(skip_serializing_if = "Option::is_none")]
1565    pub description: Option<String>,
1566    #[serde(rename = "volumeType")]
1567    pub volume_type: String,
1568    #[serde(skip_serializing_if = "Option::is_none")]
1569    pub encryption: Option<bool>,
1570    #[serde(rename = "encryptionKey", skip_serializing_if = "Option::is_none")]
1571    pub encryption_key: Option<String>,
1572    #[serde(skip_serializing_if = "Option::is_none")]
1573    pub retention: Option<VolumeRetentionPolicy>,
1574    #[serde(skip_serializing_if = "Option::is_none")]
1575    pub versioning: Option<VolumeVersioningPolicy>,
1576    #[serde(skip_serializing_if = "Option::is_none")]
1577    pub compaction: Option<String>,
1578    #[serde(rename = "quotaLimit", skip_serializing_if = "Option::is_none")]
1579    pub quota_limit: Option<i64>,
1580    #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
1581    pub region_cluster_id: Option<i64>,
1582    #[serde(rename = "regionClusterUuid", skip_serializing_if = "Option::is_none")]
1583    pub region_cluster_uuid: Option<String>,
1584}
1585
1586#[derive(Debug, Clone, Serialize, Deserialize)]
1587pub struct CreateVolumeResponse {
1588    pub id: i64,
1589    #[serde(rename = "encryptionKey", skip_serializing_if = "Option::is_none")]
1590    pub encryption_key: Option<String>,
1591}
1592
1593#[derive(Debug, Clone, Serialize)]
1594pub struct EditVolumeRequest {
1595    #[serde(skip_serializing_if = "Option::is_none")]
1596    pub description: Option<String>,
1597    #[serde(skip_serializing_if = "Option::is_none")]
1598    pub retention: Option<VolumeRetentionPolicy>,
1599    #[serde(skip_serializing_if = "Option::is_none")]
1600    pub versioning: Option<VolumeVersioningPolicy>,
1601    #[serde(skip_serializing_if = "Option::is_none")]
1602    pub compaction: Option<String>,
1603}
1604
1605#[derive(Debug, Clone, Serialize)]
1606pub struct MoveVolumeClusterRequest {
1607    #[serde(rename = "targetClusterId", skip_serializing_if = "Option::is_none")]
1608    pub target_cluster_id: Option<i64>,
1609    #[serde(rename = "targetClusterUuid", skip_serializing_if = "Option::is_none")]
1610    pub target_cluster_uuid: Option<String>,
1611}
1612
1613#[derive(Debug, Clone, Serialize, Deserialize)]
1614pub struct MoveClusterVolumeResponse {
1615    pub id: i64,
1616    #[serde(rename = "sourceClusterId")]
1617    pub source_cluster_id: i64,
1618    #[serde(rename = "targetClusterId")]
1619    pub target_cluster_id: i64,
1620    #[serde(rename = "handoverUntil")]
1621    pub handover_until: i64,
1622}
1623
1624#[derive(Debug, Clone, Serialize)]
1625pub struct DeactivateVolumeRequest {
1626    #[serde(rename = "isCleanupMetaEnabled", skip_serializing_if = "Option::is_none")]
1627    pub is_cleanup_meta_enabled: Option<bool>,
1628    #[serde(rename = "isCleanupStorageEnabled", skip_serializing_if = "Option::is_none")]
1629    pub is_cleanup_storage_enabled: Option<bool>,
1630    #[serde(rename = "isCleanupVaultEnabled", skip_serializing_if = "Option::is_none")]
1631    pub is_cleanup_vault_enabled: Option<bool>,
1632}
1633
1634#[derive(Debug, Clone, Serialize)]
1635pub struct GenerateVolumeAPIKeysRequest {
1636    #[serde(rename = "userId")]
1637    pub user_id: i64,
1638    #[serde(skip_serializing_if = "Option::is_none")]
1639    pub name: Option<String>,
1640}
1641
1642#[derive(Debug, Clone, Serialize, Deserialize)]
1643pub struct GenerateAPIKeysVolumeResponse {
1644    #[serde(rename = "apiKey")]
1645    pub api_key: String,
1646    #[serde(rename = "apiSecret")]
1647    pub api_secret: String,
1648    #[serde(rename = "evictedApiKeys", skip_serializing_if = "Option::is_none")]
1649    pub evicted_api_keys: Option<Vec<String>>,
1650}
1651
1652#[derive(Debug, Clone, Serialize, Deserialize)]
1653pub struct ListAPIKeysVolumeResponse {
1654    pub keys: Vec<VolumeApiKey>,
1655}
1656
1657#[derive(Debug, Clone, Serialize)]
1658pub struct RevokeVolumeAPIKeyRequest {
1659    #[serde(rename = "apiKey")]
1660    pub api_key: String,
1661}
1662
1663#[derive(Debug, Clone, Serialize)]
1664pub struct RevokeVolumeAPIKeysByUserRequest {
1665    #[serde(rename = "userId")]
1666    pub user_id: i64,
1667}
1668
1669#[derive(Debug, Clone, Serialize)]
1670pub struct GenerateVolumeSttKeyRequest {
1671    #[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
1672    pub user_id: Option<i64>,
1673    #[serde(rename = "expirySeconds")]
1674    pub expiry_seconds: i64,
1675}
1676
1677#[derive(Debug, Clone, Serialize, Deserialize)]
1678pub struct GenerateSttKeyVolumeResponse {
1679    #[serde(rename = "apiKey")]
1680    pub api_key: String,
1681    #[serde(rename = "apiSecret")]
1682    pub api_secret: String,
1683    #[serde(rename = "expiresAt")]
1684    pub expires_at: String,
1685}
1686
1687#[derive(Debug, Clone, Serialize)]
1688pub struct UpdateVolumeQuotaRequest {
1689    #[serde(rename = "quotaLimit")]
1690    pub quota_limit: i64,
1691}
1692
1693#[derive(Debug, Clone, Serialize, Deserialize)]
1694pub struct StatsVolumeResponse {
1695    #[serde(rename = "volumeId")]
1696    pub volume_id: String,
1697    #[serde(rename = "liveVolume")]
1698    pub live_volume: i64,
1699    #[serde(rename = "totalVolume")]
1700    pub total_volume: i64,
1701    #[serde(rename = "pendingVolume")]
1702    pub pending_volume: i64,
1703    #[serde(rename = "liveInactiveVolume")]
1704    pub live_inactive_volume: i64,
1705}
1706
1707#[derive(Debug, Clone, Serialize, Deserialize)]
1708pub struct SizeHistoryVolumeResponse {
1709    pub points: Vec<VolumeSizePoint>,
1710}
1711
1712#[derive(Debug, Clone, Serialize)]
1713pub struct CreateVolumeForkRequest {
1714    pub name: String,
1715    #[serde(rename = "parentName", skip_serializing_if = "Option::is_none")]
1716    pub parent_name: Option<String>,
1717    #[serde(rename = "asOf", skip_serializing_if = "Option::is_none")]
1718    pub as_of: Option<i64>,
1719    #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1720    pub volume_type: Option<String>,
1721}
1722
1723#[derive(Debug, Clone, Serialize)]
1724pub struct DeleteVolumeForkRequest {
1725    #[serde(skip_serializing_if = "Option::is_none")]
1726    pub force: Option<bool>,
1727    #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1728    pub volume_type: Option<String>,
1729}
1730
1731#[derive(Debug, Clone, Serialize, Deserialize)]
1732pub struct DeleteForkVolumeResponse {
1733    #[serde(rename = "inactivatedFids")]
1734    pub inactivated_fids: Vec<i32>,
1735}
1736
1737#[derive(Debug, Clone, Serialize)]
1738pub struct RestoreVolumeForkRequest {
1739    #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1740    pub volume_type: Option<String>,
1741}
1742
1743#[derive(Debug, Clone, Default)]
1744pub struct VolumeListOptions {
1745    pub account_id: i64,
1746    pub region_id: Option<i64>,
1747    pub region_cluster_id: Option<i64>,
1748    pub storage_id: Option<i64>,
1749    pub volume_type: Option<String>,
1750    pub locked: Option<bool>,
1751    pub is_active: Option<bool>,
1752    pub page: Option<i64>,
1753    pub limit: Option<i64>,
1754}
1755
1756// VolumeForkTrees
1757
1758#[derive(Debug, Clone, Default)]
1759pub struct VolumeForkTreeListOptions {
1760    pub path: Option<String>,
1761    pub as_of: Option<i64>,
1762    pub cursor: Option<i64>,
1763    pub limit: Option<i64>,
1764    pub sort: Option<String>,
1765    pub kind: Option<String>,
1766}
1767
1768// VolumeForkEntries
1769
1770#[derive(Debug, Clone, Default)]
1771pub struct VolumeForkEntryListOptions {
1772    pub path: Option<String>,
1773    pub cursor: Option<i64>,
1774    pub limit: Option<i64>,
1775}
1776
1777// VolumeForkSearches
1778
1779#[derive(Debug, Clone, Default)]
1780pub struct VolumeForkSearchListOptions {
1781    pub q: Option<String>,
1782    pub path: Option<String>,
1783    pub as_of: Option<i64>,
1784    pub exact: Option<bool>,
1785    pub cursor: Option<i64>,
1786    pub limit: Option<i64>,
1787    pub kind: Option<String>,
1788}
1789
1790// AuditLogs
1791
1792#[derive(Debug, Clone, Default)]
1793pub struct AuditLogListOptions {
1794    pub account_id: i64,
1795    pub region_id: Option<i64>,
1796    pub region_cluster_id: Option<i64>,
1797    pub cursor: Option<i64>,
1798    pub limit: Option<i64>,
1799    pub subject: Option<String>,
1800    pub created_by: Option<String>,
1801}
1802
1803// RegionAuditLogs
1804
1805#[derive(Debug, Clone, Default)]
1806pub struct RegionAuditLogListOptions {
1807    pub region_cluster_id: Option<i64>,
1808    pub cursor: Option<i64>,
1809    pub limit: Option<i64>,
1810    pub subject: Option<String>,
1811    pub node: Option<String>,
1812}
1813
1814// ServiceNodes
1815
1816#[derive(Debug, Clone, Serialize, Deserialize)]
1817pub struct StatsHistoryServiceNodeResponse {
1818    #[serde(rename = "intervalMs")]
1819    pub interval_ms: i64,
1820    pub samples: Vec<NodeStatsSample>,
1821}
1822
1823// Nodes
1824
1825// ClientSessions
1826
1827#[derive(Debug, Clone, Default)]
1828pub struct ClientSessionListOptions {
1829    pub account_id: i64,
1830    pub region_id: Option<i64>,
1831    pub region_cluster_id: Option<i64>,
1832    pub volume_id: Option<i64>,
1833    pub user_id: Option<i64>,
1834    pub client_type: Option<String>,
1835    pub status: Option<ClientSessionStatus>,
1836    pub is_active: Option<bool>,
1837    pub os_name: Option<String>,
1838    pub platform: Option<String>,
1839    pub search: Option<String>,
1840    pub page: Option<i64>,
1841    pub limit: Option<i64>,
1842}
1843
1844// Discover
1845
1846// Metrics
1847
1848#[derive(Debug, Clone, Serialize)]
1849pub struct GenerateMetricTokenRequest {
1850    #[serde(rename = "expirySeconds")]
1851    pub expiry_seconds: i64,
1852}
1853
1854// Dashboard
1855
1856// License
1857
1858#[derive(Debug, Clone, Serialize)]
1859pub struct LoadLicenseRequest {
1860    pub payloads: Vec<String>,
1861}
1862
1863// Alerts
1864
1865#[derive(Debug, Clone, Serialize, Deserialize)]
1866pub struct ResolveAlertResponse {
1867    #[serde(rename = "alertId")]
1868    pub alert_id: String,
1869}
1870
1871#[derive(Debug, Clone, Default)]
1872pub struct AlertListOptions {
1873    pub active: Option<bool>,
1874    pub account_id: Option<i64>,
1875    pub region_id: Option<i64>,
1876    pub severity: Option<i64>,
1877    pub category: Option<String>,
1878    pub since: Option<String>,
1879    pub page: Option<i64>,
1880    pub limit: Option<i64>,
1881}
1882
1883// RegionAlerts
1884
1885#[derive(Debug, Clone, Serialize, Deserialize)]
1886pub struct ResolveRegionAlertResponse {
1887    #[serde(rename = "alertId")]
1888    pub alert_id: String,
1889}
1890
1891#[derive(Debug, Clone, Default)]
1892pub struct RegionAlertListOptions {
1893    pub active: Option<bool>,
1894    pub severity: Option<i64>,
1895    pub category: Option<String>,
1896    pub node_id: Option<String>,
1897    pub region_cluster_id: Option<i64>,
1898    pub since: Option<String>,
1899    pub page: Option<i64>,
1900    pub limit: Option<i64>,
1901}
1902
1903// GCWorkerEvents
1904
1905#[derive(Debug, Clone, Default)]
1906pub struct GCWorkerEventListOptions {
1907    pub node_id: Option<String>,
1908    pub goal: Option<String>,
1909    pub sid: Option<i64>,
1910    pub region_cluster_id: Option<i64>,
1911    pub since: Option<String>,
1912    pub page: Option<i64>,
1913    pub limit: Option<i64>,
1914}
1915
1916// Vault