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