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