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