1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Default)]
7pub struct Config {
8 pub base_url: String,
10 pub private_key: String,
12 pub dashboard_user: Option<DashboardUser>,
14 pub dashboard_hmac_key: Option<String>,
17}
18
19#[derive(Debug, Clone, Default)]
21pub struct ListOptions {
22 pub page: Option<i64>,
23 pub limit: Option<i64>,
24}
25
26#[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#[derive(Debug, Clone, Deserialize)]
38pub struct PaginatedResponse<T> {
39 pub items: Vec<T>,
40 pub pagination: PaginationMeta,
41}
42
43#[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#[derive(Debug, Clone, Deserialize)]
53pub struct IdResponse {
54 pub id: i64,
55}
56
57#[derive(Debug, Clone, PartialEq, Eq)]
61pub enum ClientSessionStatus {
62 Connected,
63 Active,
64 Degraded,
65 Disconnected,
66 Expired,
67 Unknown,
68 UnknownValue(String),
70}
71
72impl ClientSessionStatus {
73 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 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#[derive(Debug, Clone, PartialEq, Eq)]
136pub enum LicenseQuotaState {
137 Ok,
138 Exceeded,
139 Unknown(String),
141}
142
143impl LicenseQuotaState {
144 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 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#[derive(Debug, Clone, PartialEq, Eq)]
199pub enum LicenseStatus {
200 Valid,
201 Expiring,
202 Grace,
203 ExpiredAccess,
204 Expired,
205 Unknown(String),
207}
208
209impl LicenseStatus {
210 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 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#[derive(Debug, Clone, PartialEq, Eq)]
271pub enum PairState {
272 Active,
273 Draining,
274 SyncedDrained,
275 Retired,
276 Unknown(String),
278}
279
280impl PairState {
281 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 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 VolumeBlockPlacementConfig {
582 pub id: i64,
583 #[serde(rename = "targetPairCount")]
584 pub target_pair_count: i32,
585 #[serde(rename = "currentEpoch")]
586 pub current_epoch: i64,
587 #[serde(rename = "pairIds")]
588 pub pair_ids: Vec<String>,
589}
590
591#[derive(Debug, Clone, Serialize, Deserialize)]
592pub struct VolumeBlockPlacementResizeResult {
593 pub id: i64,
594 #[serde(rename = "targetPairCount")]
595 pub target_pair_count: i32,
596 #[serde(rename = "pairCountBefore")]
597 pub pair_count_before: i32,
598 #[serde(rename = "pairsAdded")]
599 pub pairs_added: i32,
600 #[serde(rename = "pairsRemoved")]
601 pub pairs_removed: i32,
602 #[serde(rename = "pairCountAfter")]
603 pub pair_count_after: i32,
604 pub epoch: i64,
605 pub partial: bool,
606 #[serde(skip_serializing_if = "Option::is_none")]
607 pub reason: Option<String>,
608}
609
610#[derive(Debug, Clone, Serialize, Deserialize)]
611pub struct Fork {
612 pub fid: i32,
613 pub name: String,
614 #[serde(rename = "parentFid")]
615 pub parent_fid: i32,
616 #[serde(rename = "parentName")]
617 pub parent_name: String,
618 #[serde(rename = "snapshotTs")]
619 pub snapshot_ts: i64,
620 #[serde(rename = "createdBy", skip_serializing_if = "Option::is_none")]
621 pub created_by: Option<i64>,
622 #[serde(rename = "createdAt")]
623 pub created_at: i64,
624 #[serde(rename = "childrenCount")]
625 pub children_count: i32,
626 #[serde(skip_serializing_if = "Option::is_none")]
627 pub inactive: Option<bool>,
628 #[serde(rename = "inactiveAt", skip_serializing_if = "Option::is_none")]
629 pub inactive_at: Option<i64>,
630 pub status: String,
631 pub size: i64,
632}
633
634#[derive(Debug, Clone, Serialize, Deserialize)]
635pub struct ForkTreeEntry {
636 pub inode: i64,
637 pub name: String,
638 pub kind: String,
639 pub size: i64,
640 pub mtime: i64,
641 pub ctime: i64,
642 #[serde(rename = "creatorId", skip_serializing_if = "Option::is_none")]
643 pub creator_id: Option<i64>,
644 #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
645 pub updater_id: Option<i64>,
646}
647
648#[derive(Debug, Clone, Serialize, Deserialize)]
649pub struct ForkEntryDetail {
650 pub inode: i64,
651 pub path: String,
652 pub name: String,
653 pub kind: String,
654 pub size: i64,
655 pub mtime: i64,
656 pub ctime: i64,
657 pub generation: i64,
658 #[serde(skip_serializing_if = "Option::is_none")]
659 pub owner: Option<String>,
660 #[serde(skip_serializing_if = "Option::is_none")]
661 pub mode: Option<i32>,
662 #[serde(skip_serializing_if = "Option::is_none")]
663 pub xattrs: Option<serde_json::Value>,
664 #[serde(rename = "creatorId", skip_serializing_if = "Option::is_none")]
665 pub creator_id: Option<i64>,
666 #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
667 pub updater_id: Option<i64>,
668}
669
670#[derive(Debug, Clone, Serialize, Deserialize)]
671pub struct ForkEntryVersion {
672 pub generation: i64,
673 pub size: i64,
674 pub mtime: i64,
675 #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
676 pub updater_id: Option<i64>,
677 #[serde(rename = "contentHash", skip_serializing_if = "Option::is_none")]
678 pub content_hash: Option<String>,
679}
680
681#[derive(Debug, Clone, Serialize, Deserialize)]
682pub struct ForkTreeMatch {
683 pub path: String,
684 pub inode: i64,
685 pub kind: String,
686 pub size: i64,
687 pub mtime: i64,
688}
689
690#[derive(Debug, Clone, Serialize, Deserialize)]
691pub struct AuditLog {
692 pub id: i64,
693 pub title: String,
694 #[serde(skip_serializing_if = "Option::is_none")]
695 pub description: Option<String>,
696 #[serde(skip_serializing_if = "Option::is_none")]
697 pub subject: Option<String>,
698 pub success: bool,
699 #[serde(skip_serializing_if = "Option::is_none")]
700 pub data: Option<serde_json::Value>,
701 #[serde(rename = "createdBy", skip_serializing_if = "Option::is_none")]
702 pub created_by: Option<String>,
703 #[serde(skip_serializing_if = "Option::is_none")]
704 pub node: Option<String>,
705 #[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
706 pub account_id: Option<i64>,
707 #[serde(rename = "regionId", skip_serializing_if = "Option::is_none")]
708 pub region_id: Option<i64>,
709 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
710 pub region_cluster_id: Option<i64>,
711 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
712 pub created_at: Option<String>,
713 #[serde(rename = "updatedAt", skip_serializing_if = "Option::is_none")]
714 pub updated_at: Option<String>,
715}
716
717#[derive(Debug, Clone, Serialize, Deserialize)]
718pub struct ServiceNode {
719 pub id: i64,
720 #[serde(rename = "regionId")]
721 pub region_id: i64,
722 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
723 pub region_cluster_id: Option<i64>,
724 #[serde(rename = "serviceType")]
725 pub service_type: String,
726 #[serde(rename = "nodeId")]
727 pub node_id: String,
728 #[serde(rename = "advertiseAddr")]
729 pub advertise_addr: String,
730 #[serde(rename = "rpcAddr", skip_serializing_if = "Option::is_none")]
731 pub rpc_addr: Option<String>,
732 #[serde(skip_serializing_if = "Option::is_none")]
733 pub metadata: Option<serde_json::Value>,
734 #[serde(rename = "metricsEndpoint", skip_serializing_if = "Option::is_none")]
735 pub metrics_endpoint: Option<String>,
736 #[serde(rename = "instanceId", skip_serializing_if = "Option::is_none")]
737 pub instance_id: Option<String>,
738 #[serde(rename = "instanceInfo", skip_serializing_if = "Option::is_none")]
739 pub instance_info: Option<serde_json::Value>,
740 pub status: String,
741 #[serde(rename = "lastHeartbeat", skip_serializing_if = "Option::is_none")]
742 pub last_heartbeat: Option<i64>,
743 #[serde(rename = "isActive")]
744 pub is_active: bool,
745 #[serde(rename = "memUsage", skip_serializing_if = "Option::is_none")]
746 pub mem_usage: Option<f64>,
747 #[serde(rename = "sysLoad", skip_serializing_if = "Option::is_none")]
748 pub sys_load: Option<i64>,
749 #[serde(rename = "binaryVersion", skip_serializing_if = "Option::is_none")]
750 pub binary_version: Option<i32>,
751}
752
753#[derive(Debug, Clone, Serialize, Deserialize)]
754pub struct ClientSession {
755 pub id: i64,
756 pub account: Ref,
757 pub region: Ref,
758 #[serde(rename = "regionCluster", skip_serializing_if = "Option::is_none")]
759 pub region_cluster: Option<Ref>,
760 pub volume: VolumeRef,
761 #[serde(skip_serializing_if = "Option::is_none")]
762 pub user: Option<Ref>,
763 #[serde(rename = "clientType")]
764 pub client_type: String,
765 #[serde(rename = "osName")]
766 pub os_name: String,
767 #[serde(rename = "osVersion", skip_serializing_if = "Option::is_none")]
768 pub os_version: Option<String>,
769 #[serde(rename = "appVersion", skip_serializing_if = "Option::is_none")]
770 pub app_version: Option<String>,
771 #[serde(skip_serializing_if = "Option::is_none")]
772 pub hostname: Option<String>,
773 #[serde(rename = "ipAddr")]
774 pub ip_addr: String,
775 #[serde(rename = "mountMode", skip_serializing_if = "Option::is_none")]
776 pub mount_mode: Option<String>,
777 #[serde(rename = "mountPath", skip_serializing_if = "Option::is_none")]
778 pub mount_path: Option<String>,
779 #[serde(rename = "forkName", skip_serializing_if = "Option::is_none")]
780 pub fork_name: Option<String>,
781 #[serde(rename = "isTemporaryFork")]
782 pub is_temporary_fork: bool,
783 #[serde(skip_serializing_if = "Option::is_none")]
784 pub metadata: Option<serde_json::Value>,
785 #[serde(skip_serializing_if = "Option::is_none")]
786 pub metrics: Option<serde_json::Value>,
787 pub status: ClientSessionStatus,
788 #[serde(rename = "lastHeartbeat", skip_serializing_if = "Option::is_none")]
789 pub last_heartbeat: Option<i64>,
790 #[serde(rename = "connectedAt", skip_serializing_if = "Option::is_none")]
791 pub connected_at: Option<i64>,
792 #[serde(rename = "disconnectedAt", skip_serializing_if = "Option::is_none")]
793 pub disconnected_at: Option<i64>,
794 #[serde(rename = "isActive")]
795 pub is_active: bool,
796}
797
798#[derive(Debug, Clone, Serialize, Deserialize)]
799pub struct SessionSummary {
800 #[serde(rename = "byStatus")]
801 pub by_status: Vec<SessionSummaryStatusEntry>,
802 #[serde(rename = "byPlatform")]
803 pub by_platform: Vec<SessionSummaryFacet>,
804 #[serde(rename = "byOsName")]
805 pub by_os_name: Vec<SessionSummaryFacet>,
806 #[serde(rename = "regionCount")]
807 pub region_count: i64,
808 #[serde(rename = "volumeCount")]
809 pub volume_count: i64,
810 #[serde(rename = "hostCount")]
811 pub host_count: i64,
812 #[serde(rename = "degradedCount")]
813 pub degraded_count: i64,
814}
815
816#[derive(Debug, Clone, Serialize, Deserialize)]
817pub struct DiscoverMetaResponse {
818 #[serde(rename = "regionId")]
819 pub region_id: i64,
820 pub region: String,
821 pub endpoints: Vec<DiscoverEndpoint>,
822}
823
824#[derive(Debug, Clone, Serialize, Deserialize)]
825pub struct MetricsTarget {
826 pub targets: Vec<String>,
827 pub labels: serde_json::Value,
828}
829
830#[derive(Debug, Clone, Serialize, Deserialize)]
831pub struct MetricsTokenResponse {
832 pub token: String,
833}
834
835#[derive(Debug, Clone, Serialize, Deserialize)]
836pub struct DashboardStats {
837 #[serde(rename = "userCount")]
838 pub user_count: i64,
839 #[serde(rename = "volumeCount")]
840 pub volume_count: i64,
841 #[serde(rename = "regionCount")]
842 pub region_count: i64,
843 #[serde(rename = "storageCount")]
844 pub storage_count: i64,
845 #[serde(rename = "totalVolumeUsed")]
846 pub total_volume_used: i64,
847 #[serde(rename = "totalQuotaLimit")]
848 pub total_quota_limit: i64,
849 #[serde(rename = "activeSessionCount")]
850 pub active_session_count: i64,
851 #[serde(rename = "regionBreakdown")]
852 pub region_breakdown: Vec<RegionVolumeMetrics>,
853}
854
855#[derive(Debug, Clone, Serialize, Deserialize)]
856pub struct LicenseDetails {
857 #[serde(rename = "licenseId")]
858 pub license_id: String,
859 pub licensee: String,
860 pub contact: String,
861 #[serde(rename = "licenseType")]
862 pub license_type: String,
863 #[serde(rename = "issuedAt")]
864 pub issued_at: String,
865 #[serde(rename = "expiresAt")]
866 pub expires_at: String,
867 #[serde(rename = "gracePeriodDays")]
868 pub grace_period_days: i64,
869 #[serde(rename = "expiredAccessDays")]
870 pub expired_access_days: i64,
871 #[serde(rename = "maxNodes")]
872 pub max_nodes: i64,
873 #[serde(rename = "maxVolumes")]
874 pub max_volumes: i64,
875 #[serde(rename = "maxUsers")]
876 pub max_users: i64,
877 #[serde(rename = "maxAccounts")]
878 pub max_accounts: i64,
879 #[serde(rename = "maxRegions")]
880 pub max_regions: i64,
881 #[serde(rename = "maxStorageBytes")]
882 pub max_storage_bytes: i64,
883 pub status: LicenseStatus,
884 #[serde(rename = "daysRemaining")]
885 pub days_remaining: i64,
886 #[serde(rename = "graceEndsAt")]
887 pub grace_ends_at: String,
888 #[serde(rename = "graceDaysLeft")]
889 pub grace_days_left: i64,
890 #[serde(rename = "expiredAccessEndsAt")]
891 pub expired_access_ends_at: String,
892 #[serde(rename = "expiredAccessDaysLeft")]
893 pub expired_access_days_left: i64,
894 pub quota: LicenseQuota,
895 #[serde(skip_serializing_if = "Option::is_none")]
896 pub distribution: Option<String>,
897 #[serde(rename = "distributionRef", skip_serializing_if = "Option::is_none")]
898 pub distribution_ref: Option<Vec<String>>,
899 #[serde(rename = "unlimitedStorage", skip_serializing_if = "Option::is_none")]
900 pub unlimited_storage: Option<bool>,
901}
902
903#[derive(Debug, Clone, Serialize, Deserialize)]
904pub struct LicenseTerms {
905 pub terms: String,
906}
907
908#[derive(Debug, Clone, Serialize, Deserialize)]
909pub struct LicenseLoadResult {
910 pub loaded: i64,
911 pub ignored: i64,
912}
913
914#[derive(Debug, Clone, Serialize, Deserialize)]
915pub struct LicenseList {
916 pub items: Vec<LicenseRecord>,
917}
918
919#[derive(Debug, Clone, Serialize, Deserialize)]
920pub struct ServiceAlert {
921 pub id: i64,
922 #[serde(rename = "alertId")]
923 pub alert_id: String,
924 pub source: String,
925 #[serde(rename = "nodeId")]
926 pub node_id: String,
927 pub severity: i64,
928 pub category: String,
929 pub title: String,
930 #[serde(skip_serializing_if = "Option::is_none")]
931 pub description: Option<String>,
932 #[serde(skip_serializing_if = "Option::is_none")]
933 pub region: Option<Ref>,
934 #[serde(skip_serializing_if = "Option::is_none")]
935 pub account: Option<Ref>,
936 #[serde(rename = "eventTime")]
937 pub event_time: String,
938 #[serde(rename = "resolvedAt", skip_serializing_if = "Option::is_none")]
939 pub resolved_at: Option<String>,
940 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
941 pub created_at: Option<String>,
942}
943
944#[derive(Debug, Clone, Serialize, Deserialize)]
945pub struct AlertCountResponse {
946 pub active: i64,
947 pub recent: i64,
948 #[serde(rename = "infoCount")]
949 pub info_count: i64,
950 #[serde(rename = "warningCount")]
951 pub warning_count: i64,
952 #[serde(rename = "criticalCount")]
953 pub critical_count: i64,
954}
955
956#[derive(Debug, Clone, Serialize, Deserialize)]
957pub struct RegionAlert {
958 pub id: i64,
959 #[serde(rename = "alertId")]
960 pub alert_id: String,
961 pub source: String,
962 #[serde(rename = "nodeId")]
963 pub node_id: String,
964 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
965 pub region_cluster_id: Option<i64>,
966 pub severity: i64,
967 pub category: String,
968 pub title: String,
969 #[serde(skip_serializing_if = "Option::is_none")]
970 pub description: Option<String>,
971 #[serde(rename = "eventTime")]
972 pub event_time: String,
973 #[serde(rename = "resolvedAt", skip_serializing_if = "Option::is_none")]
974 pub resolved_at: Option<String>,
975 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
976 pub created_at: Option<String>,
977}
978
979#[derive(Debug, Clone, Serialize, Deserialize)]
980pub struct GCWorkerEvent {
981 pub id: i64,
982 #[serde(rename = "nodeId")]
983 pub node_id: String,
984 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
985 pub region_cluster_id: Option<i64>,
986 pub goal: String,
987 #[serde(skip_serializing_if = "Option::is_none")]
988 pub sid: Option<i64>,
989 #[serde(skip_serializing_if = "Option::is_none")]
990 pub subject: Option<String>,
991 pub ops: serde_json::Value,
992 #[serde(rename = "durationMs")]
993 pub duration_ms: i64,
994 #[serde(rename = "eventTime")]
995 pub event_time: String,
996 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
997 pub created_at: Option<String>,
998}
999
1000#[derive(Debug, Clone, Serialize, Deserialize)]
1001pub struct GCWorkerEventHistogramResponse {
1002 pub buckets: Vec<GCWorkerEventBucket>,
1003}
1004
1005#[derive(Debug, Clone, Serialize, Deserialize)]
1006pub struct GCWorkerEventGoalsResponse {
1007 pub goals: Vec<String>,
1008}
1009
1010#[derive(Debug, Clone, Serialize, Deserialize)]
1011pub struct BackfillFailure {
1012 #[serde(rename = "shardId")]
1013 pub shard_id: i64,
1014 pub error: String,
1015}
1016
1017#[derive(Debug, Clone, Serialize, Deserialize)]
1018pub struct BlockMember {
1019 #[serde(skip_serializing_if = "Option::is_none")]
1020 pub name: Option<String>,
1021 #[serde(rename = "regionClusterId")]
1022 pub region_cluster_id: i64,
1023}
1024
1025#[derive(Debug, Clone, Serialize, Deserialize)]
1026pub struct CompatibleStorage {
1027 pub id: i64,
1028 pub uuid: String,
1029 pub name: String,
1030 #[serde(rename = "storageType")]
1031 pub storage_type: String,
1032 #[serde(rename = "providerType")]
1033 pub provider_type: String,
1034 pub volumes: Vec<CompatibleVolume>,
1035}
1036
1037#[derive(Debug, Clone, Serialize, Deserialize)]
1038pub struct CompatibleVolume {
1039 pub id: String,
1040 pub name: String,
1041}
1042
1043#[derive(Debug, Clone, Serialize, Deserialize)]
1044pub struct DashboardUser {
1045 pub id: String,
1046 pub name: String,
1047 #[serde(skip_serializing_if = "Option::is_none")]
1048 pub email: Option<String>,
1049 pub role: String,
1050 #[serde(skip_serializing_if = "Option::is_none")]
1051 pub username: Option<String>,
1052 #[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
1053 pub account_id: Option<i64>,
1054 #[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
1055 pub user_id: Option<i64>,
1056 #[serde(rename = "volumeId", skip_serializing_if = "Option::is_none")]
1057 pub volume_id: Option<i64>,
1058 #[serde(skip_serializing_if = "Option::is_none")]
1059 pub exp: Option<i64>,
1060}
1061
1062#[derive(Debug, Clone, Serialize, Deserialize)]
1063pub struct DiscoverEndpoint {
1064 #[serde(rename = "nodeId")]
1065 pub node_id: String,
1066 pub addr: String,
1067 pub status: String,
1068}
1069
1070#[derive(Debug, Clone, Serialize, Deserialize)]
1071pub struct GCWorkerEventBucket {
1072 #[serde(rename = "bucketStart")]
1073 pub bucket_start: String,
1074 pub goal: String,
1075 pub count: i64,
1076}
1077
1078#[derive(Debug, Clone, Serialize, Deserialize)]
1079pub struct LicenseQuota {
1080 pub state: LicenseQuotaState,
1081 #[serde(rename = "liveVolume")]
1082 pub live_volume: i64,
1083 #[serde(rename = "totalVolume")]
1084 pub total_volume: i64,
1085 pub generation: i64,
1086 #[serde(rename = "lastTransitionAtMs")]
1087 pub last_transition_at_ms: i64,
1088}
1089
1090#[derive(Debug, Clone, Serialize, Deserialize)]
1091pub struct LicenseRecord {
1092 pub key: String,
1093 pub licensee: String,
1094 pub status: LicenseStatus,
1095 #[serde(rename = "issuedAt")]
1096 pub issued_at: String,
1097 #[serde(rename = "expiresAt")]
1098 pub expires_at: String,
1099 #[serde(rename = "maxStorageBytes")]
1100 pub max_storage_bytes: i64,
1101 #[serde(rename = "insertedAt")]
1102 pub inserted_at: String,
1103}
1104
1105#[derive(Debug, Clone, Serialize, Deserialize)]
1106pub struct MoveVolumeFailure {
1107 #[serde(rename = "volumeId")]
1108 pub volume_id: String,
1109 pub error: String,
1110}
1111
1112#[derive(Debug, Clone, Serialize, Deserialize)]
1113pub struct NodeStatsSample {
1114 #[serde(rename = "timestampMs")]
1115 pub timestamp_ms: i64,
1116 #[serde(rename = "intervalMs")]
1117 pub interval_ms: i64,
1118 #[serde(rename = "loadAvg1")]
1119 pub load_avg1: f64,
1120 #[serde(rename = "loadAvg5")]
1121 pub load_avg5: f64,
1122 #[serde(rename = "loadAvg15")]
1123 pub load_avg15: f64,
1124 #[serde(rename = "memUsage")]
1125 pub mem_usage: f64,
1126 #[serde(rename = "readIops")]
1127 pub read_iops: f64,
1128 #[serde(rename = "writeIops")]
1129 pub write_iops: f64,
1130 #[serde(rename = "netRxBytesPerSec")]
1131 pub net_rx_bytes_per_sec: f64,
1132 #[serde(rename = "netTxBytesPerSec")]
1133 pub net_tx_bytes_per_sec: f64,
1134 #[serde(rename = "processCount")]
1135 pub process_count: i64,
1136 #[serde(rename = "diskUsedBytes", skip_serializing_if = "Option::is_none")]
1137 pub disk_used_bytes: Option<i64>,
1138 #[serde(rename = "diskTotalBytes", skip_serializing_if = "Option::is_none")]
1139 pub disk_total_bytes: Option<i64>,
1140 #[serde(rename = "dbLatency1mUs", skip_serializing_if = "Option::is_none")]
1141 pub db_latency1m_us: Option<f64>,
1142 #[serde(rename = "dbLatency5mUs", skip_serializing_if = "Option::is_none")]
1143 pub db_latency5m_us: Option<f64>,
1144 #[serde(rename = "dbLatency15mUs", skip_serializing_if = "Option::is_none")]
1145 pub db_latency15m_us: Option<f64>,
1146 #[serde(rename = "dbQueriesPerSec", skip_serializing_if = "Option::is_none")]
1147 pub db_queries_per_sec: Option<f64>,
1148 #[serde(rename = "dbConnsInUse", skip_serializing_if = "Option::is_none")]
1149 pub db_conns_in_use: Option<i64>,
1150 #[serde(rename = "dbConnsMax", skip_serializing_if = "Option::is_none")]
1151 pub db_conns_max: Option<i64>,
1152 #[serde(rename = "dbConnsIdle", skip_serializing_if = "Option::is_none")]
1153 pub db_conns_idle: Option<i64>,
1154 #[serde(rename = "dbConnsFree", skip_serializing_if = "Option::is_none")]
1155 pub db_conns_free: Option<i64>,
1156 #[serde(rename = "dbConnsInUse1m", skip_serializing_if = "Option::is_none")]
1157 pub db_conns_in_use1m: Option<f64>,
1158 #[serde(rename = "dbConnsInUse5m", skip_serializing_if = "Option::is_none")]
1159 pub db_conns_in_use5m: Option<f64>,
1160 #[serde(rename = "dbConnsInUse15m", skip_serializing_if = "Option::is_none")]
1161 pub db_conns_in_use15m: Option<f64>,
1162 #[serde(rename = "dbPingAvgUs", skip_serializing_if = "Option::is_none")]
1163 pub db_ping_avg_us: Option<f64>,
1164 #[serde(rename = "dbPingMinUs", skip_serializing_if = "Option::is_none")]
1165 pub db_ping_min_us: Option<f64>,
1166 #[serde(rename = "dbPingMaxUs", skip_serializing_if = "Option::is_none")]
1167 pub db_ping_max_us: Option<f64>,
1168 #[serde(rename = "dbPingStdDevUs", skip_serializing_if = "Option::is_none")]
1169 pub db_ping_std_dev_us: Option<f64>,
1170}
1171
1172#[derive(Debug, Clone, Serialize, Deserialize)]
1173pub struct Ref {
1174 pub id: i64,
1175 pub name: String,
1176}
1177
1178#[derive(Debug, Clone, Serialize, Deserialize)]
1179pub struct RegionVolumeMetrics {
1180 #[serde(rename = "regionId")]
1181 pub region_id: i64,
1182 #[serde(rename = "regionName")]
1183 pub region_name: String,
1184 #[serde(rename = "volumeCount")]
1185 pub volume_count: i64,
1186 #[serde(rename = "totalVolumeUsed")]
1187 pub total_volume_used: i64,
1188 #[serde(rename = "totalQuotaLimit")]
1189 pub total_quota_limit: i64,
1190}
1191
1192#[derive(Debug, Clone, Serialize, Deserialize)]
1193pub struct RetentionPolicy {
1194 #[serde(rename = "clientSessionDays", skip_serializing_if = "Option::is_none")]
1195 pub client_session_days: Option<i32>,
1196}
1197
1198#[derive(Debug, Clone, Serialize, Deserialize)]
1199pub struct SessionSummaryFacet {
1200 pub label: String,
1201 pub count: i64,
1202}
1203
1204#[derive(Debug, Clone, Serialize, Deserialize)]
1205pub struct SessionSummaryStatusEntry {
1206 #[serde(rename = "clientType")]
1207 pub client_type: String,
1208 pub status: String,
1209 pub count: i64,
1210}
1211
1212#[derive(Debug, Clone, Serialize, Deserialize)]
1213pub struct UserLite {
1214 pub id: i64,
1215 pub username: String,
1216 pub name: String,
1217}
1218
1219#[derive(Debug, Clone, Serialize, Deserialize)]
1220pub struct VolumeApiKey {
1221 #[serde(rename = "apiKey")]
1222 pub api_key: String,
1223 #[serde(skip_serializing_if = "Option::is_none")]
1224 pub name: Option<String>,
1225 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
1226 pub created_at: Option<String>,
1227 #[serde(rename = "lastUsedAt", skip_serializing_if = "Option::is_none")]
1228 pub last_used_at: Option<String>,
1229}
1230
1231#[derive(Debug, Clone, Serialize, Deserialize)]
1232pub struct VolumeRef {
1233 pub id: i64,
1234 pub name: String,
1235 #[serde(skip_serializing_if = "Option::is_none")]
1236 pub r#type: Option<String>,
1237}
1238
1239#[derive(Debug, Clone, Serialize, Deserialize)]
1240pub struct VolumeRetentionPolicy {
1241 #[serde(rename = "dataDays", skip_serializing_if = "Option::is_none")]
1242 pub data_days: Option<i32>,
1243 #[serde(rename = "graceDays", skip_serializing_if = "Option::is_none")]
1244 pub grace_days: Option<i32>,
1245 #[serde(rename = "forkGraceDays", skip_serializing_if = "Option::is_none")]
1246 pub fork_grace_days: Option<i32>,
1247 #[serde(rename = "eventLogDays", skip_serializing_if = "Option::is_none")]
1248 pub event_log_days: Option<i32>,
1249}
1250
1251#[derive(Debug, Clone, Serialize, Deserialize)]
1252pub struct VolumeSizePoint {
1253 #[serde(rename = "bucketEnd")]
1254 pub bucket_end: String,
1255 #[serde(rename = "liveVolume")]
1256 pub live_volume: i64,
1257 #[serde(rename = "totalVolume")]
1258 pub total_volume: i64,
1259 #[serde(rename = "pendingVolume")]
1260 pub pending_volume: i64,
1261 #[serde(rename = "liveInactiveVolume")]
1262 pub live_inactive_volume: i64,
1263}
1264
1265#[derive(Debug, Clone, Serialize, Deserialize)]
1266pub struct VolumeVersioningPolicy {
1267 #[serde(rename = "contentWindowSeconds", skip_serializing_if = "Option::is_none")]
1268 pub content_window_seconds: Option<i32>,
1269}
1270
1271#[derive(Debug, Clone, Serialize)]
1274pub struct CreateAccountRequest {
1275 pub name: String,
1276 #[serde(skip_serializing_if = "Option::is_none")]
1277 pub description: Option<String>,
1278 #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
1279 pub icon_url: Option<String>,
1280 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
1281 pub provider_info: Option<serde_json::Value>,
1282}
1283
1284#[derive(Debug, Clone, Serialize)]
1285pub struct EditAccountRequest {
1286 pub name: String,
1287 #[serde(skip_serializing_if = "Option::is_none")]
1288 pub description: Option<String>,
1289 #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
1290 pub icon_url: Option<String>,
1291 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
1292 pub provider_info: Option<serde_json::Value>,
1293 #[serde(skip_serializing_if = "Option::is_none")]
1294 pub retention: Option<RetentionPolicy>,
1295}
1296
1297#[derive(Debug, Clone, Serialize)]
1298pub struct UpdateAccountQuotaRequest {
1299 #[serde(rename = "quotaLimit")]
1300 pub quota_limit: i64,
1301 #[serde(rename = "quotaExcessPct", skip_serializing_if = "Option::is_none")]
1302 pub quota_excess_pct: Option<i32>,
1303}
1304
1305#[derive(Debug, Clone, Default)]
1306pub struct AccountListOptions {
1307 pub is_active: Option<bool>,
1308 pub page: Option<i64>,
1309 pub limit: Option<i64>,
1310}
1311
1312#[derive(Debug, Clone, Serialize)]
1315pub struct AddUserRequest {
1316 #[serde(rename = "accountId")]
1317 pub account_id: i64,
1318 pub username: String,
1319 pub email: String,
1320 #[serde(skip_serializing_if = "Option::is_none")]
1321 pub name: Option<String>,
1322 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
1323 pub provider_info: Option<serde_json::Value>,
1324}
1325
1326#[derive(Debug, Clone, Serialize)]
1327pub struct BulkUserRequest {
1328 pub ids: Vec<i64>,
1329}
1330
1331#[derive(Debug, Clone, Serialize, Deserialize)]
1332pub struct BulkUserResponse {
1333 pub users: Vec<UserLite>,
1334}
1335
1336#[derive(Debug, Clone, Serialize)]
1337pub struct EditUserRequest {
1338 pub username: String,
1339 pub email: String,
1340 #[serde(skip_serializing_if = "Option::is_none")]
1341 pub name: Option<String>,
1342 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
1343 pub provider_info: Option<serde_json::Value>,
1344}
1345
1346#[derive(Debug, Clone, Default)]
1347pub struct UserListOptions {
1348 pub account_id: i64,
1349 pub search: Option<String>,
1350 pub is_active: Option<bool>,
1351 pub page: Option<i64>,
1352 pub limit: Option<i64>,
1353}
1354
1355#[derive(Debug, Clone, Serialize)]
1358pub struct CreateRegionRequest {
1359 #[serde(rename = "accountId")]
1360 pub account_id: i64,
1361 pub name: String,
1362}
1363
1364#[derive(Debug, Clone, Serialize)]
1365pub struct EditRegionRequest {
1366 #[serde(rename = "accountId")]
1367 pub account_id: i64,
1368 pub name: String,
1369}
1370
1371#[derive(Debug, Clone, Default)]
1372pub struct RegionListOptions {
1373 pub account_id: i64,
1374 pub is_active: Option<bool>,
1375 pub page: Option<i64>,
1376 pub limit: Option<i64>,
1377}
1378
1379#[derive(Debug, Clone, Default)]
1382pub struct ClusterListOptions {
1383 pub account_id: i64,
1384 pub region_id: Option<i64>,
1385 pub is_active: Option<bool>,
1386 pub page: Option<i64>,
1387 pub limit: Option<i64>,
1388}
1389
1390#[derive(Debug, Clone, Serialize)]
1393pub struct CreateRegionClusterRequest {
1394 pub name: String,
1395}
1396
1397#[derive(Debug, Clone, Serialize)]
1398pub struct EditRegionClusterRequest {
1399 pub name: String,
1400}
1401
1402#[derive(Debug, Clone, Serialize)]
1403pub struct SetRegionClusterReadyRequest {
1404 pub ready: bool,
1405}
1406
1407#[derive(Debug, Clone, Serialize, Deserialize)]
1408pub struct SetReadyRegionClusterResponse {
1409 pub id: i64,
1410 pub ready: bool,
1411}
1412
1413#[derive(Debug, Clone, Default)]
1414pub struct RegionClusterListOptions {
1415 pub is_active: Option<bool>,
1416 pub page: Option<i64>,
1417 pub limit: Option<i64>,
1418}
1419
1420#[derive(Debug, Clone, Serialize)]
1423pub struct CreateStorageRequest {
1424 #[serde(rename = "accountId")]
1425 pub account_id: i64,
1426 #[serde(rename = "regionId")]
1427 pub region_id: i64,
1428 pub name: String,
1429 #[serde(skip_serializing_if = "Option::is_none")]
1430 pub description: Option<String>,
1431 #[serde(rename = "storageType")]
1432 pub storage_type: String,
1433 #[serde(rename = "providerType")]
1434 pub provider_type: String,
1435 pub endpoint: String,
1436 #[serde(skip_serializing_if = "Option::is_none")]
1437 pub region: Option<String>,
1438 #[serde(skip_serializing_if = "Option::is_none")]
1439 pub bucket: Option<String>,
1440 #[serde(skip_serializing_if = "Option::is_none")]
1441 pub base: Option<String>,
1442 #[serde(rename = "blockRegion", skip_serializing_if = "Option::is_none")]
1443 pub block_region: Option<String>,
1444 #[serde(rename = "blockSize", skip_serializing_if = "Option::is_none")]
1445 pub block_size: Option<i32>,
1446 #[serde(skip_serializing_if = "Option::is_none")]
1447 pub members: Option<Vec<BlockMember>>,
1448 #[serde(rename = "accessKey", skip_serializing_if = "Option::is_none")]
1449 pub access_key: Option<String>,
1450 #[serde(rename = "secretKey", skip_serializing_if = "Option::is_none")]
1451 pub secret_key: Option<String>,
1452}
1453
1454#[derive(Debug, Clone, Serialize, Deserialize)]
1455pub struct CreateStorageResponse {
1456 pub id: i64,
1457 #[serde(rename = "blockVolumeIds", skip_serializing_if = "Option::is_none")]
1458 pub block_volume_ids: Option<Vec<String>>,
1459}
1460
1461#[derive(Debug, Clone, Serialize)]
1462pub struct EditStorageRequest {
1463 pub name: String,
1464 #[serde(skip_serializing_if = "Option::is_none")]
1465 pub description: Option<String>,
1466 #[serde(skip_serializing_if = "Option::is_none")]
1467 pub endpoint: Option<String>,
1468 #[serde(rename = "accessKey", skip_serializing_if = "Option::is_none")]
1469 pub access_key: Option<String>,
1470 #[serde(rename = "secretKey", skip_serializing_if = "Option::is_none")]
1471 pub secret_key: Option<String>,
1472 #[serde(rename = "directAccess", skip_serializing_if = "Option::is_none")]
1473 pub direct_access: Option<bool>,
1474}
1475
1476#[derive(Debug, Clone, Serialize)]
1477pub struct TestStorageNewBucketRequest {
1478 pub endpoint: String,
1479 #[serde(skip_serializing_if = "Option::is_none")]
1480 pub region: Option<String>,
1481 pub bucket: String,
1482 #[serde(rename = "accessKey")]
1483 pub access_key: String,
1484 #[serde(rename = "secretKey")]
1485 pub secret_key: String,
1486 #[serde(rename = "providerType", skip_serializing_if = "Option::is_none")]
1487 pub provider_type: Option<String>,
1488}
1489
1490#[derive(Debug, Clone, Serialize, Deserialize)]
1491pub struct TestNewBucketStorageResponse {
1492 #[serde(rename = "bucketExists")]
1493 pub bucket_exists: bool,
1494 pub list: bool,
1495 pub write: bool,
1496 pub read: bool,
1497 pub delete: bool,
1498 pub multipart: bool,
1499}
1500
1501#[derive(Debug, Clone, Serialize, Deserialize)]
1502pub struct TestStorageBucketStorageResponse {
1503 #[serde(rename = "bucketExists")]
1504 pub bucket_exists: bool,
1505 pub list: bool,
1506 pub write: bool,
1507 pub read: bool,
1508 pub delete: bool,
1509 pub multipart: bool,
1510}
1511
1512#[derive(Debug, Clone, Serialize, Deserialize)]
1513pub struct ListCompatibleStorageResponse {
1514 pub storages: Vec<CompatibleStorage>,
1515}
1516
1517#[derive(Debug, Clone, Serialize)]
1518pub struct MoveStorageVolumesRequest {
1519 #[serde(rename = "volumeIds")]
1520 pub volume_ids: Vec<String>,
1521}
1522
1523#[derive(Debug, Clone, Serialize, Deserialize)]
1524pub struct MoveVolumesStorageResponse {
1525 pub moved: Vec<String>,
1526 pub failures: Vec<MoveVolumeFailure>,
1527}
1528
1529#[derive(Debug, Clone, Serialize)]
1530pub struct UpdateStorageConfigRequest {
1531 pub k: i32,
1532}
1533
1534#[derive(Debug, Clone, Serialize, Deserialize)]
1535pub struct GetConfigStorageResponse {
1536 pub id: String,
1537 pub k: i32,
1538 #[serde(rename = "algorithmVersion")]
1539 pub algorithm_version: i32,
1540 #[serde(rename = "epochPolicyVersion")]
1541 pub epoch_policy_version: i32,
1542}
1543
1544#[derive(Debug, Clone, Serialize, Deserialize)]
1545pub struct DrainPairStorageResponse {
1546 pub id: String,
1547 pub state: String,
1548}
1549
1550#[derive(Debug, Clone, Serialize, Deserialize)]
1551pub struct CancelDrainStorageResponse {
1552 pub id: String,
1553 pub state: String,
1554}
1555
1556#[derive(Debug, Clone, Serialize)]
1557pub struct RegisterStorageMemberRequest {
1558 #[serde(rename = "regionClusterId")]
1559 pub region_cluster_id: i64,
1560 pub name: String,
1561}
1562
1563#[derive(Debug, Clone, Serialize, Deserialize)]
1564pub struct BackfillFingerprintsStorageResponse {
1565 pub scanned: i32,
1566 pub updated: i32,
1567 pub failures: Vec<BackfillFailure>,
1568 #[serde(rename = "hasMore")]
1569 pub has_more: bool,
1570}
1571
1572#[derive(Debug, Clone, Default)]
1573pub struct StorageListOptions {
1574 pub account_id: i64,
1575 pub search: Option<String>,
1576 pub region_id: Option<i64>,
1577 pub storage_type: Option<String>,
1578 pub provider_type: Option<String>,
1579 pub is_active: Option<bool>,
1580 pub direct_access: Option<bool>,
1581 pub page: Option<i64>,
1582 pub limit: Option<i64>,
1583}
1584
1585#[derive(Debug, Clone, Serialize)]
1588pub struct CreateVolumeRequest {
1589 #[serde(rename = "accountId")]
1590 pub account_id: i64,
1591 #[serde(rename = "storageId")]
1592 pub storage_id: i64,
1593 pub name: String,
1594 #[serde(skip_serializing_if = "Option::is_none")]
1595 pub description: Option<String>,
1596 #[serde(rename = "volumeType")]
1597 pub volume_type: String,
1598 #[serde(skip_serializing_if = "Option::is_none")]
1599 pub encryption: Option<bool>,
1600 #[serde(rename = "encryptionKey", skip_serializing_if = "Option::is_none")]
1601 pub encryption_key: Option<String>,
1602 #[serde(skip_serializing_if = "Option::is_none")]
1603 pub retention: Option<VolumeRetentionPolicy>,
1604 #[serde(skip_serializing_if = "Option::is_none")]
1605 pub versioning: Option<VolumeVersioningPolicy>,
1606 #[serde(skip_serializing_if = "Option::is_none")]
1607 pub compaction: Option<String>,
1608 #[serde(rename = "quotaLimit", skip_serializing_if = "Option::is_none")]
1609 pub quota_limit: Option<i64>,
1610 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
1611 pub region_cluster_id: Option<i64>,
1612 #[serde(rename = "regionClusterUuid", skip_serializing_if = "Option::is_none")]
1613 pub region_cluster_uuid: Option<String>,
1614}
1615
1616#[derive(Debug, Clone, Serialize, Deserialize)]
1617pub struct CreateVolumeResponse {
1618 pub id: i64,
1619 #[serde(rename = "encryptionKey", skip_serializing_if = "Option::is_none")]
1620 pub encryption_key: Option<String>,
1621}
1622
1623#[derive(Debug, Clone, Serialize)]
1624pub struct EditVolumeRequest {
1625 #[serde(skip_serializing_if = "Option::is_none")]
1626 pub description: Option<String>,
1627 #[serde(skip_serializing_if = "Option::is_none")]
1628 pub retention: Option<VolumeRetentionPolicy>,
1629 #[serde(skip_serializing_if = "Option::is_none")]
1630 pub versioning: Option<VolumeVersioningPolicy>,
1631 #[serde(skip_serializing_if = "Option::is_none")]
1632 pub compaction: Option<String>,
1633}
1634
1635#[derive(Debug, Clone, Serialize)]
1636pub struct MoveVolumeClusterRequest {
1637 #[serde(rename = "targetClusterId", skip_serializing_if = "Option::is_none")]
1638 pub target_cluster_id: Option<i64>,
1639 #[serde(rename = "targetClusterUuid", skip_serializing_if = "Option::is_none")]
1640 pub target_cluster_uuid: Option<String>,
1641}
1642
1643#[derive(Debug, Clone, Serialize, Deserialize)]
1644pub struct MoveClusterVolumeResponse {
1645 pub id: i64,
1646 #[serde(rename = "sourceClusterId")]
1647 pub source_cluster_id: i64,
1648 #[serde(rename = "targetClusterId")]
1649 pub target_cluster_id: i64,
1650 #[serde(rename = "handoverUntil")]
1651 pub handover_until: i64,
1652}
1653
1654#[derive(Debug, Clone, Serialize)]
1655pub struct DeactivateVolumeRequest {
1656 #[serde(rename = "isCleanupMetaEnabled", skip_serializing_if = "Option::is_none")]
1657 pub is_cleanup_meta_enabled: Option<bool>,
1658 #[serde(rename = "isCleanupStorageEnabled", skip_serializing_if = "Option::is_none")]
1659 pub is_cleanup_storage_enabled: Option<bool>,
1660 #[serde(rename = "isCleanupVaultEnabled", skip_serializing_if = "Option::is_none")]
1661 pub is_cleanup_vault_enabled: Option<bool>,
1662}
1663
1664#[derive(Debug, Clone, Serialize)]
1665pub struct GenerateVolumeAPIKeysRequest {
1666 #[serde(rename = "userId")]
1667 pub user_id: i64,
1668 #[serde(skip_serializing_if = "Option::is_none")]
1669 pub name: Option<String>,
1670}
1671
1672#[derive(Debug, Clone, Serialize, Deserialize)]
1673pub struct GenerateAPIKeysVolumeResponse {
1674 #[serde(rename = "apiKey")]
1675 pub api_key: String,
1676 #[serde(rename = "apiSecret")]
1677 pub api_secret: String,
1678 #[serde(rename = "evictedApiKeys", skip_serializing_if = "Option::is_none")]
1679 pub evicted_api_keys: Option<Vec<String>>,
1680}
1681
1682#[derive(Debug, Clone, Serialize, Deserialize)]
1683pub struct ListAPIKeysVolumeResponse {
1684 pub keys: Vec<VolumeApiKey>,
1685}
1686
1687#[derive(Debug, Clone, Serialize)]
1688pub struct RevokeVolumeAPIKeyRequest {
1689 #[serde(rename = "apiKey")]
1690 pub api_key: String,
1691}
1692
1693#[derive(Debug, Clone, Serialize)]
1694pub struct RevokeVolumeAPIKeysByUserRequest {
1695 #[serde(rename = "userId")]
1696 pub user_id: i64,
1697}
1698
1699#[derive(Debug, Clone, Serialize)]
1700pub struct GenerateVolumeSttKeyRequest {
1701 #[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
1702 pub user_id: Option<i64>,
1703 #[serde(rename = "expirySeconds")]
1704 pub expiry_seconds: i64,
1705}
1706
1707#[derive(Debug, Clone, Serialize, Deserialize)]
1708pub struct GenerateSttKeyVolumeResponse {
1709 #[serde(rename = "apiKey")]
1710 pub api_key: String,
1711 #[serde(rename = "apiSecret")]
1712 pub api_secret: String,
1713 #[serde(rename = "expiresAt")]
1714 pub expires_at: String,
1715}
1716
1717#[derive(Debug, Clone, Serialize)]
1718pub struct UpdateVolumeQuotaRequest {
1719 #[serde(rename = "quotaLimit")]
1720 pub quota_limit: i64,
1721}
1722
1723#[derive(Debug, Clone, Serialize)]
1724pub struct UpdateVolumePairConfigRequest {
1725 #[serde(rename = "targetPairCount")]
1726 pub target_pair_count: i32,
1727}
1728
1729#[derive(Debug, Clone, Serialize, Deserialize)]
1730pub struct StatsVolumeResponse {
1731 #[serde(rename = "volumeId")]
1732 pub volume_id: String,
1733 #[serde(rename = "liveVolume")]
1734 pub live_volume: i64,
1735 #[serde(rename = "totalVolume")]
1736 pub total_volume: i64,
1737 #[serde(rename = "pendingVolume")]
1738 pub pending_volume: i64,
1739 #[serde(rename = "liveInactiveVolume")]
1740 pub live_inactive_volume: i64,
1741}
1742
1743#[derive(Debug, Clone, Serialize, Deserialize)]
1744pub struct SizeHistoryVolumeResponse {
1745 pub points: Vec<VolumeSizePoint>,
1746}
1747
1748#[derive(Debug, Clone, Serialize)]
1749pub struct CreateVolumeForkRequest {
1750 pub name: String,
1751 #[serde(rename = "parentName", skip_serializing_if = "Option::is_none")]
1752 pub parent_name: Option<String>,
1753 #[serde(rename = "asOf", skip_serializing_if = "Option::is_none")]
1754 pub as_of: Option<i64>,
1755 #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1756 pub volume_type: Option<String>,
1757}
1758
1759#[derive(Debug, Clone, Serialize)]
1760pub struct DeleteVolumeForkRequest {
1761 #[serde(skip_serializing_if = "Option::is_none")]
1762 pub force: Option<bool>,
1763 #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1764 pub volume_type: Option<String>,
1765}
1766
1767#[derive(Debug, Clone, Serialize, Deserialize)]
1768pub struct DeleteForkVolumeResponse {
1769 #[serde(rename = "inactivatedFids")]
1770 pub inactivated_fids: Vec<i32>,
1771}
1772
1773#[derive(Debug, Clone, Serialize)]
1774pub struct RestoreVolumeForkRequest {
1775 #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1776 pub volume_type: Option<String>,
1777}
1778
1779#[derive(Debug, Clone, Default)]
1780pub struct VolumeListOptions {
1781 pub account_id: i64,
1782 pub region_id: Option<i64>,
1783 pub region_cluster_id: Option<i64>,
1784 pub storage_id: Option<i64>,
1785 pub volume_type: Option<String>,
1786 pub locked: Option<bool>,
1787 pub is_active: Option<bool>,
1788 pub page: Option<i64>,
1789 pub limit: Option<i64>,
1790}
1791
1792#[derive(Debug, Clone, Default)]
1795pub struct VolumeForkTreeListOptions {
1796 pub path: Option<String>,
1797 pub as_of: Option<i64>,
1798 pub cursor: Option<i64>,
1799 pub limit: Option<i64>,
1800 pub sort: Option<String>,
1801 pub kind: Option<String>,
1802}
1803
1804#[derive(Debug, Clone, Default)]
1807pub struct VolumeForkEntryListOptions {
1808 pub path: Option<String>,
1809 pub cursor: Option<i64>,
1810 pub limit: Option<i64>,
1811}
1812
1813#[derive(Debug, Clone, Default)]
1816pub struct VolumeForkSearchListOptions {
1817 pub q: Option<String>,
1818 pub path: Option<String>,
1819 pub as_of: Option<i64>,
1820 pub exact: Option<bool>,
1821 pub cursor: Option<i64>,
1822 pub limit: Option<i64>,
1823 pub kind: Option<String>,
1824}
1825
1826#[derive(Debug, Clone, Default)]
1829pub struct AuditLogListOptions {
1830 pub account_id: i64,
1831 pub region_id: Option<i64>,
1832 pub region_cluster_id: Option<i64>,
1833 pub cursor: Option<i64>,
1834 pub limit: Option<i64>,
1835 pub subject: Option<String>,
1836 pub created_by: Option<String>,
1837}
1838
1839#[derive(Debug, Clone, Default)]
1842pub struct RegionAuditLogListOptions {
1843 pub region_cluster_id: Option<i64>,
1844 pub cursor: Option<i64>,
1845 pub limit: Option<i64>,
1846 pub subject: Option<String>,
1847 pub node: Option<String>,
1848}
1849
1850#[derive(Debug, Clone, Serialize, Deserialize)]
1853pub struct StatsHistoryServiceNodeResponse {
1854 #[serde(rename = "intervalMs")]
1855 pub interval_ms: i64,
1856 pub samples: Vec<NodeStatsSample>,
1857}
1858
1859#[derive(Debug, Clone, Default)]
1864pub struct ClientSessionListOptions {
1865 pub account_id: i64,
1866 pub region_id: Option<i64>,
1867 pub region_cluster_id: Option<i64>,
1868 pub volume_id: Option<i64>,
1869 pub user_id: Option<i64>,
1870 pub client_type: Option<String>,
1871 pub status: Option<ClientSessionStatus>,
1872 pub is_active: Option<bool>,
1873 pub os_name: Option<String>,
1874 pub platform: Option<String>,
1875 pub search: Option<String>,
1876 pub page: Option<i64>,
1877 pub limit: Option<i64>,
1878}
1879
1880#[derive(Debug, Clone, Serialize)]
1885pub struct GenerateMetricTokenRequest {
1886 #[serde(rename = "expirySeconds")]
1887 pub expiry_seconds: i64,
1888}
1889
1890#[derive(Debug, Clone, Serialize)]
1895pub struct LoadLicenseRequest {
1896 pub payloads: Vec<String>,
1897}
1898
1899#[derive(Debug, Clone, Serialize, Deserialize)]
1902pub struct ResolveAlertResponse {
1903 #[serde(rename = "alertId")]
1904 pub alert_id: String,
1905}
1906
1907#[derive(Debug, Clone, Default)]
1908pub struct AlertListOptions {
1909 pub active: Option<bool>,
1910 pub account_id: Option<i64>,
1911 pub region_id: Option<i64>,
1912 pub severity: Option<i64>,
1913 pub category: Option<String>,
1914 pub since: Option<String>,
1915 pub page: Option<i64>,
1916 pub limit: Option<i64>,
1917}
1918
1919#[derive(Debug, Clone, Serialize, Deserialize)]
1922pub struct ResolveRegionAlertResponse {
1923 #[serde(rename = "alertId")]
1924 pub alert_id: String,
1925}
1926
1927#[derive(Debug, Clone, Default)]
1928pub struct RegionAlertListOptions {
1929 pub active: Option<bool>,
1930 pub severity: Option<i64>,
1931 pub category: Option<String>,
1932 pub node_id: Option<String>,
1933 pub region_cluster_id: Option<i64>,
1934 pub since: Option<String>,
1935 pub page: Option<i64>,
1936 pub limit: Option<i64>,
1937}
1938
1939#[derive(Debug, Clone, Default)]
1942pub struct GCWorkerEventListOptions {
1943 pub node_id: Option<String>,
1944 pub goal: Option<String>,
1945 pub sid: Option<i64>,
1946 pub region_cluster_id: Option<i64>,
1947 pub since: Option<String>,
1948 pub page: Option<i64>,
1949 pub limit: Option<i64>,
1950}
1951
1952