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
57pub type ClientSessionStatus = String;
59pub const CLIENT_SESSION_STATUS_CONNECTED: &str = "connected";
60pub const CLIENT_SESSION_STATUS_ACTIVE: &str = "active";
61pub const CLIENT_SESSION_STATUS_UNHEALTHY: &str = "unhealthy";
62pub const CLIENT_SESSION_STATUS_DISCONNECTED: &str = "disconnected";
63pub const CLIENT_SESSION_STATUS_EXPIRED: &str = "expired";
64pub const CLIENT_SESSION_STATUS_UNKNOWN: &str = "unknown";
65
66pub type LicenseQuotaState = String;
68pub const LICENSE_QUOTA_STATE_OK: &str = "ok";
69pub const LICENSE_QUOTA_STATE_EXCEEDED: &str = "exceeded";
70
71pub type LicenseStatus = String;
73pub const LICENSE_STATUS_VALID: &str = "valid";
74pub const LICENSE_STATUS_EXPIRING: &str = "expiring";
75pub const LICENSE_STATUS_GRACE: &str = "grace";
76pub const LICENSE_STATUS_EXPIRED_ACCESS: &str = "expired_access";
77pub const LICENSE_STATUS_EXPIRED: &str = "expired";
78
79#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct Account {
81 pub id: i64,
82 pub name: String,
83 pub description: String,
84 #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
85 pub icon_url: Option<String>,
86 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
87 pub provider_info: Option<serde_json::Value>,
88 #[serde(rename = "liveVolume")]
89 pub live_volume: i64,
90 #[serde(rename = "totalVolume")]
91 pub total_volume: i64,
92 #[serde(rename = "quotaLimit")]
93 pub quota_limit: i64,
94 #[serde(rename = "quotaExcessPct")]
95 pub quota_excess_pct: i32,
96 #[serde(rename = "isActive")]
97 pub is_active: bool,
98 pub locked: bool,
99 #[serde(rename = "createdAt")]
100 pub created_at: String,
101 #[serde(rename = "updatedAt")]
102 pub updated_at: String,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct User {
107 pub id: i64,
108 #[serde(rename = "accountId")]
109 pub account_id: i64,
110 pub username: String,
111 pub email: String,
112 pub name: String,
113 #[serde(rename = "isActive")]
114 pub is_active: bool,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
118pub struct Region {
119 pub id: i64,
120 #[serde(rename = "exportId")]
121 pub export_id: String,
122 #[serde(rename = "accountId")]
123 pub account_id: i64,
124 pub name: String,
125 pub dns: String,
126 #[serde(rename = "liveVolume")]
127 pub live_volume: i64,
128 #[serde(rename = "totalVolume")]
129 pub total_volume: i64,
130 #[serde(rename = "isActive")]
131 pub is_active: bool,
132 #[serde(rename = "createdAt")]
133 pub created_at: String,
134 #[serde(rename = "updatedAt")]
135 pub updated_at: String,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize)]
139pub struct RegionCluster {
140 pub id: i64,
141 #[serde(rename = "exportId")]
142 pub export_id: String,
143 #[serde(rename = "regionId")]
144 pub region_id: i64,
145 pub name: String,
146 #[serde(rename = "defaultCluster")]
147 pub default_cluster: bool,
148 #[serde(rename = "isReady")]
149 pub is_ready: bool,
150 #[serde(rename = "isActive")]
151 pub is_active: bool,
152 #[serde(rename = "createdAt")]
153 pub created_at: String,
154 #[serde(rename = "updatedAt")]
155 pub updated_at: String,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize)]
159pub struct Storage {
160 pub id: i64,
161 pub account: Ref,
162 #[serde(rename = "regionInfo")]
163 pub region_info: Ref,
164 pub name: String,
165 #[serde(skip_serializing_if = "Option::is_none")]
166 pub description: Option<String>,
167 #[serde(rename = "storageType")]
168 pub storage_type: String,
169 #[serde(rename = "providerType")]
170 pub provider_type: String,
171 pub endpoint: String,
172 #[serde(skip_serializing_if = "Option::is_none")]
173 pub region: Option<String>,
174 #[serde(skip_serializing_if = "Option::is_none")]
175 pub bucket: Option<String>,
176 #[serde(skip_serializing_if = "Option::is_none")]
177 pub base: Option<String>,
178 #[serde(rename = "blockRegion", skip_serializing_if = "Option::is_none")]
179 pub block_region: Option<String>,
180 #[serde(rename = "blockSize", skip_serializing_if = "Option::is_none")]
181 pub block_size: Option<i32>,
182 #[serde(rename = "isActive")]
183 pub is_active: bool,
184 #[serde(rename = "createdAt")]
185 pub created_at: String,
186 #[serde(rename = "updatedAt")]
187 pub updated_at: String,
188}
189
190#[derive(Debug, Clone, Serialize, Deserialize)]
191pub struct BlockVolume {
192 pub id: String,
193 #[serde(skip_serializing_if = "Option::is_none")]
194 pub name: Option<String>,
195 #[serde(rename = "clusterName", skip_serializing_if = "Option::is_none")]
196 pub cluster_name: Option<String>,
197 #[serde(rename = "clusterUuid", skip_serializing_if = "Option::is_none")]
198 pub cluster_uuid: Option<String>,
199 #[serde(rename = "shardId")]
200 pub shard_id: i64,
201 #[serde(rename = "regionClusterId")]
202 pub region_cluster_id: i64,
203 #[serde(rename = "clusterReady")]
204 pub cluster_ready: bool,
205 #[serde(rename = "isActive")]
206 pub is_active: bool,
207 #[serde(rename = "createdAt")]
208 pub created_at: String,
209 #[serde(rename = "updatedAt")]
210 pub updated_at: String,
211}
212
213#[derive(Debug, Clone, Serialize, Deserialize)]
214pub struct Volume {
215 pub id: i64,
216 pub account: Ref,
217 pub storage: Ref,
218 pub region: Ref,
219 #[serde(rename = "regionCluster", skip_serializing_if = "Option::is_none")]
220 pub region_cluster: Option<Ref>,
221 pub name: String,
222 #[serde(skip_serializing_if = "Option::is_none")]
223 pub description: Option<String>,
224 #[serde(rename = "volumeType")]
225 pub volume_type: String,
226 #[serde(rename = "storageType", skip_serializing_if = "Option::is_none")]
227 pub storage_type: Option<String>,
228 pub encryption: bool,
229 #[serde(rename = "quotaLimit")]
230 pub quota_limit: i64,
231 #[serde(rename = "liveVolume")]
232 pub live_volume: i64,
233 #[serde(rename = "totalVolume")]
234 pub total_volume: i64,
235 #[serde(rename = "pendingVolume")]
236 pub pending_volume: i64,
237 #[serde(rename = "liveInactiveVolume")]
238 pub live_inactive_volume: i64,
239 pub locked: bool,
240 #[serde(rename = "retentionPeriod")]
241 pub retention_period: i32,
242 #[serde(rename = "gracePeriod")]
243 pub grace_period: i32,
244 #[serde(rename = "forkGracePeriod")]
245 pub fork_grace_period: i32,
246 #[serde(rename = "eventLogRetentionPeriod")]
247 pub event_log_retention_period: i32,
248 #[serde(rename = "isActive")]
249 pub is_active: bool,
250 #[serde(rename = "isCleanupMetaEnabled")]
251 pub is_cleanup_meta_enabled: bool,
252 #[serde(rename = "isCleanupStorageEnabled")]
253 pub is_cleanup_storage_enabled: bool,
254 #[serde(rename = "isCleanupVaultEnabled")]
255 pub is_cleanup_vault_enabled: bool,
256 #[serde(rename = "createdAt")]
257 pub created_at: String,
258 #[serde(rename = "updatedAt")]
259 pub updated_at: String,
260}
261
262#[derive(Debug, Clone, Serialize, Deserialize)]
263pub struct Fork {
264 pub fid: i32,
265 pub name: String,
266 #[serde(rename = "parentFid")]
267 pub parent_fid: i32,
268 #[serde(rename = "parentName")]
269 pub parent_name: String,
270 #[serde(rename = "snapshotTs")]
271 pub snapshot_ts: i64,
272 #[serde(rename = "createdBy", skip_serializing_if = "Option::is_none")]
273 pub created_by: Option<i64>,
274 #[serde(rename = "createdAt")]
275 pub created_at: i64,
276 #[serde(rename = "childrenCount")]
277 pub children_count: i32,
278 #[serde(skip_serializing_if = "Option::is_none")]
279 pub inactive: Option<bool>,
280 #[serde(rename = "inactiveAt", skip_serializing_if = "Option::is_none")]
281 pub inactive_at: Option<i64>,
282 pub status: String,
283 pub size: i64,
284}
285
286#[derive(Debug, Clone, Serialize, Deserialize)]
287pub struct ForkTreeEntry {
288 pub inode: i64,
289 pub name: String,
290 pub kind: String,
291 pub size: i64,
292 pub mtime: i64,
293 pub ctime: i64,
294 #[serde(rename = "creatorId", skip_serializing_if = "Option::is_none")]
295 pub creator_id: Option<i64>,
296 #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
297 pub updater_id: Option<i64>,
298}
299
300#[derive(Debug, Clone, Serialize, Deserialize)]
301pub struct ForkEntryDetail {
302 pub inode: i64,
303 pub path: String,
304 pub name: String,
305 pub kind: String,
306 pub size: i64,
307 pub mtime: i64,
308 pub ctime: i64,
309 pub generation: i64,
310 #[serde(skip_serializing_if = "Option::is_none")]
311 pub owner: Option<String>,
312 #[serde(skip_serializing_if = "Option::is_none")]
313 pub mode: Option<i32>,
314 #[serde(skip_serializing_if = "Option::is_none")]
315 pub xattrs: Option<serde_json::Value>,
316 #[serde(rename = "creatorId", skip_serializing_if = "Option::is_none")]
317 pub creator_id: Option<i64>,
318 #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
319 pub updater_id: Option<i64>,
320}
321
322#[derive(Debug, Clone, Serialize, Deserialize)]
323pub struct ForkEntryVersion {
324 pub generation: i64,
325 pub size: i64,
326 pub mtime: i64,
327 #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
328 pub updater_id: Option<i64>,
329 #[serde(rename = "contentHash", skip_serializing_if = "Option::is_none")]
330 pub content_hash: Option<String>,
331}
332
333#[derive(Debug, Clone, Serialize, Deserialize)]
334pub struct ForkTreeMatch {
335 pub path: String,
336 pub inode: i64,
337 pub kind: String,
338 pub size: i64,
339 pub mtime: i64,
340}
341
342#[derive(Debug, Clone, Serialize, Deserialize)]
343pub struct AuditLog {
344 pub id: i64,
345 pub title: String,
346 #[serde(skip_serializing_if = "Option::is_none")]
347 pub description: Option<String>,
348 #[serde(skip_serializing_if = "Option::is_none")]
349 pub subject: Option<String>,
350 pub success: bool,
351 #[serde(skip_serializing_if = "Option::is_none")]
352 pub data: Option<serde_json::Value>,
353 #[serde(rename = "createdBy", skip_serializing_if = "Option::is_none")]
354 pub created_by: Option<String>,
355 #[serde(skip_serializing_if = "Option::is_none")]
356 pub node: Option<String>,
357 #[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
358 pub account_id: Option<i64>,
359 #[serde(rename = "regionId", skip_serializing_if = "Option::is_none")]
360 pub region_id: Option<i64>,
361 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
362 pub region_cluster_id: Option<i64>,
363 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
364 pub created_at: Option<String>,
365 #[serde(rename = "updatedAt", skip_serializing_if = "Option::is_none")]
366 pub updated_at: Option<String>,
367}
368
369#[derive(Debug, Clone, Serialize, Deserialize)]
370pub struct ServiceNode {
371 pub id: i64,
372 #[serde(rename = "regionId")]
373 pub region_id: i64,
374 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
375 pub region_cluster_id: Option<i64>,
376 #[serde(rename = "serviceType")]
377 pub service_type: String,
378 #[serde(rename = "nodeId")]
379 pub node_id: String,
380 #[serde(rename = "advertiseAddr")]
381 pub advertise_addr: String,
382 #[serde(rename = "rpcAddr", skip_serializing_if = "Option::is_none")]
383 pub rpc_addr: Option<String>,
384 #[serde(skip_serializing_if = "Option::is_none")]
385 pub metadata: Option<serde_json::Value>,
386 pub status: String,
387 #[serde(rename = "lastHeartbeat", skip_serializing_if = "Option::is_none")]
388 pub last_heartbeat: Option<i64>,
389 #[serde(rename = "isActive")]
390 pub is_active: bool,
391 #[serde(rename = "memUsage", skip_serializing_if = "Option::is_none")]
392 pub mem_usage: Option<f64>,
393 #[serde(rename = "sysLoad", skip_serializing_if = "Option::is_none")]
394 pub sys_load: Option<i64>,
395}
396
397#[derive(Debug, Clone, Serialize, Deserialize)]
398pub struct ClientSession {
399 pub id: i64,
400 pub account: Ref,
401 pub region: Ref,
402 #[serde(rename = "regionCluster", skip_serializing_if = "Option::is_none")]
403 pub region_cluster: Option<Ref>,
404 pub volume: VolumeRef,
405 #[serde(skip_serializing_if = "Option::is_none")]
406 pub user: Option<Ref>,
407 #[serde(rename = "clientType")]
408 pub client_type: String,
409 #[serde(rename = "osName")]
410 pub os_name: String,
411 #[serde(rename = "osVersion", skip_serializing_if = "Option::is_none")]
412 pub os_version: Option<String>,
413 #[serde(rename = "appVersion", skip_serializing_if = "Option::is_none")]
414 pub app_version: Option<String>,
415 #[serde(skip_serializing_if = "Option::is_none")]
416 pub hostname: Option<String>,
417 #[serde(rename = "ipAddr")]
418 pub ip_addr: String,
419 #[serde(rename = "mountMode", skip_serializing_if = "Option::is_none")]
420 pub mount_mode: Option<String>,
421 #[serde(rename = "mountPath", skip_serializing_if = "Option::is_none")]
422 pub mount_path: Option<String>,
423 #[serde(rename = "forkName", skip_serializing_if = "Option::is_none")]
424 pub fork_name: Option<String>,
425 #[serde(rename = "isTemporaryFork")]
426 pub is_temporary_fork: bool,
427 #[serde(skip_serializing_if = "Option::is_none")]
428 pub metadata: Option<serde_json::Value>,
429 #[serde(skip_serializing_if = "Option::is_none")]
430 pub metrics: Option<serde_json::Value>,
431 pub status: ClientSessionStatus,
432 #[serde(rename = "lastHeartbeat", skip_serializing_if = "Option::is_none")]
433 pub last_heartbeat: Option<i64>,
434 #[serde(rename = "connectedAt", skip_serializing_if = "Option::is_none")]
435 pub connected_at: Option<i64>,
436 #[serde(rename = "disconnectedAt", skip_serializing_if = "Option::is_none")]
437 pub disconnected_at: Option<i64>,
438 #[serde(rename = "isActive")]
439 pub is_active: bool,
440}
441
442#[derive(Debug, Clone, Serialize, Deserialize)]
443pub struct SessionSummary {
444 #[serde(rename = "byStatus")]
445 pub by_status: Vec<SessionSummaryStatusEntry>,
446 #[serde(rename = "byPlatform")]
447 pub by_platform: Vec<SessionSummaryFacet>,
448 #[serde(rename = "byOsName")]
449 pub by_os_name: Vec<SessionSummaryFacet>,
450 #[serde(rename = "regionCount")]
451 pub region_count: i64,
452 #[serde(rename = "volumeCount")]
453 pub volume_count: i64,
454 #[serde(rename = "hostCount")]
455 pub host_count: i64,
456 #[serde(rename = "unhealthyCount")]
457 pub unhealthy_count: i64,
458}
459
460#[derive(Debug, Clone, Serialize, Deserialize)]
461pub struct DiscoverMetaResponse {
462 #[serde(rename = "regionId")]
463 pub region_id: i64,
464 pub region: String,
465 pub endpoints: Vec<DiscoverEndpoint>,
466}
467
468#[derive(Debug, Clone, Serialize, Deserialize)]
469pub struct DashboardStats {
470 #[serde(rename = "userCount")]
471 pub user_count: i64,
472 #[serde(rename = "volumeCount")]
473 pub volume_count: i64,
474 #[serde(rename = "regionCount")]
475 pub region_count: i64,
476 #[serde(rename = "storageCount")]
477 pub storage_count: i64,
478 #[serde(rename = "totalVolumeUsed")]
479 pub total_volume_used: i64,
480 #[serde(rename = "totalQuotaLimit")]
481 pub total_quota_limit: i64,
482 #[serde(rename = "activeSessionCount")]
483 pub active_session_count: i64,
484 #[serde(rename = "regionBreakdown")]
485 pub region_breakdown: Vec<RegionVolumeMetrics>,
486}
487
488#[derive(Debug, Clone, Serialize, Deserialize)]
489pub struct LicenseDetails {
490 #[serde(rename = "licenseId")]
491 pub license_id: String,
492 pub licensee: String,
493 pub contact: String,
494 #[serde(rename = "licenseType")]
495 pub license_type: String,
496 #[serde(rename = "issuedAt")]
497 pub issued_at: String,
498 #[serde(rename = "expiresAt")]
499 pub expires_at: String,
500 #[serde(rename = "gracePeriodDays")]
501 pub grace_period_days: i64,
502 #[serde(rename = "expiredAccessDays")]
503 pub expired_access_days: i64,
504 #[serde(rename = "maxNodes")]
505 pub max_nodes: i64,
506 #[serde(rename = "maxVolumes")]
507 pub max_volumes: i64,
508 #[serde(rename = "maxUsers")]
509 pub max_users: i64,
510 #[serde(rename = "maxAccounts")]
511 pub max_accounts: i64,
512 #[serde(rename = "maxRegions")]
513 pub max_regions: i64,
514 #[serde(rename = "maxStorageBytes")]
515 pub max_storage_bytes: i64,
516 pub status: LicenseStatus,
517 #[serde(rename = "daysRemaining")]
518 pub days_remaining: i64,
519 #[serde(rename = "graceEndsAt")]
520 pub grace_ends_at: String,
521 #[serde(rename = "graceDaysLeft")]
522 pub grace_days_left: i64,
523 #[serde(rename = "expiredAccessEndsAt")]
524 pub expired_access_ends_at: String,
525 #[serde(rename = "expiredAccessDaysLeft")]
526 pub expired_access_days_left: i64,
527 pub quota: LicenseQuota,
528}
529
530#[derive(Debug, Clone, Serialize, Deserialize)]
531pub struct LicenseTerms {
532 pub terms: String,
533}
534
535#[derive(Debug, Clone, Serialize, Deserialize)]
536pub struct ServiceAlert {
537 pub id: i64,
538 #[serde(rename = "alertId")]
539 pub alert_id: String,
540 pub source: String,
541 #[serde(rename = "nodeId")]
542 pub node_id: String,
543 pub severity: i64,
544 pub category: String,
545 pub title: String,
546 #[serde(skip_serializing_if = "Option::is_none")]
547 pub description: Option<String>,
548 #[serde(skip_serializing_if = "Option::is_none")]
549 pub region: Option<Ref>,
550 #[serde(skip_serializing_if = "Option::is_none")]
551 pub account: Option<Ref>,
552 #[serde(rename = "eventTime")]
553 pub event_time: String,
554 #[serde(rename = "resolvedAt", skip_serializing_if = "Option::is_none")]
555 pub resolved_at: Option<String>,
556 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
557 pub created_at: Option<String>,
558}
559
560#[derive(Debug, Clone, Serialize, Deserialize)]
561pub struct AlertCountResponse {
562 pub active: i64,
563 pub recent: i64,
564 #[serde(rename = "infoCount")]
565 pub info_count: i64,
566 #[serde(rename = "warningCount")]
567 pub warning_count: i64,
568 #[serde(rename = "criticalCount")]
569 pub critical_count: i64,
570}
571
572#[derive(Debug, Clone, Serialize, Deserialize)]
573pub struct RegionAlert {
574 pub id: i64,
575 #[serde(rename = "alertId")]
576 pub alert_id: String,
577 pub source: String,
578 #[serde(rename = "nodeId")]
579 pub node_id: String,
580 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
581 pub region_cluster_id: Option<i64>,
582 pub severity: i64,
583 pub category: String,
584 pub title: String,
585 #[serde(skip_serializing_if = "Option::is_none")]
586 pub description: Option<String>,
587 #[serde(rename = "eventTime")]
588 pub event_time: String,
589 #[serde(rename = "resolvedAt", skip_serializing_if = "Option::is_none")]
590 pub resolved_at: Option<String>,
591 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
592 pub created_at: Option<String>,
593}
594
595#[derive(Debug, Clone, Serialize, Deserialize)]
596pub struct BlockMember {
597 #[serde(skip_serializing_if = "Option::is_none")]
598 pub name: Option<String>,
599 #[serde(rename = "regionClusterId")]
600 pub region_cluster_id: i64,
601}
602
603#[derive(Debug, Clone, Serialize, Deserialize)]
604pub struct DashboardUser {
605 pub id: String,
606 pub name: String,
607 #[serde(skip_serializing_if = "Option::is_none")]
608 pub email: Option<String>,
609 pub role: String,
610 #[serde(skip_serializing_if = "Option::is_none")]
611 pub username: Option<String>,
612 #[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
613 pub account_id: Option<i64>,
614 #[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
615 pub user_id: Option<i64>,
616 #[serde(rename = "volumeId", skip_serializing_if = "Option::is_none")]
617 pub volume_id: Option<i64>,
618 #[serde(skip_serializing_if = "Option::is_none")]
619 pub exp: Option<i64>,
620}
621
622#[derive(Debug, Clone, Serialize, Deserialize)]
623pub struct DiscoverEndpoint {
624 #[serde(rename = "nodeId")]
625 pub node_id: String,
626 pub addr: String,
627 pub status: String,
628}
629
630#[derive(Debug, Clone, Serialize, Deserialize)]
631pub struct LicenseQuota {
632 pub state: LicenseQuotaState,
633 #[serde(rename = "liveVolume")]
634 pub live_volume: i64,
635 #[serde(rename = "totalVolume")]
636 pub total_volume: i64,
637 pub generation: i64,
638 #[serde(rename = "lastTransitionAtMs")]
639 pub last_transition_at_ms: i64,
640}
641
642#[derive(Debug, Clone, Serialize, Deserialize)]
643pub struct Ref {
644 pub id: i64,
645 pub name: String,
646}
647
648#[derive(Debug, Clone, Serialize, Deserialize)]
649pub struct RegionVolumeMetrics {
650 #[serde(rename = "regionId")]
651 pub region_id: i64,
652 #[serde(rename = "regionName")]
653 pub region_name: String,
654 #[serde(rename = "volumeCount")]
655 pub volume_count: i64,
656 #[serde(rename = "totalVolumeUsed")]
657 pub total_volume_used: i64,
658 #[serde(rename = "totalQuotaLimit")]
659 pub total_quota_limit: i64,
660}
661
662#[derive(Debug, Clone, Serialize, Deserialize)]
663pub struct SessionSummaryFacet {
664 pub label: String,
665 pub count: i64,
666}
667
668#[derive(Debug, Clone, Serialize, Deserialize)]
669pub struct SessionSummaryStatusEntry {
670 #[serde(rename = "clientType")]
671 pub client_type: String,
672 pub status: String,
673 pub count: i64,
674}
675
676#[derive(Debug, Clone, Serialize, Deserialize)]
677pub struct UserLite {
678 pub id: i64,
679 pub username: String,
680 pub name: String,
681}
682
683#[derive(Debug, Clone, Serialize, Deserialize)]
684pub struct VolumeRef {
685 pub id: i64,
686 pub name: String,
687 #[serde(skip_serializing_if = "Option::is_none")]
688 pub r#type: Option<String>,
689}
690
691#[derive(Debug, Clone, Serialize, Deserialize)]
692pub struct VolumeSizePoint {
693 #[serde(rename = "bucketEnd")]
694 pub bucket_end: String,
695 #[serde(rename = "liveVolume")]
696 pub live_volume: i64,
697 #[serde(rename = "totalVolume")]
698 pub total_volume: i64,
699 #[serde(rename = "pendingVolume")]
700 pub pending_volume: i64,
701 #[serde(rename = "liveInactiveVolume")]
702 pub live_inactive_volume: i64,
703}
704
705#[derive(Debug, Clone, Serialize)]
708pub struct CreateAccountRequest {
709 pub name: String,
710 #[serde(skip_serializing_if = "Option::is_none")]
711 pub description: Option<String>,
712 #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
713 pub icon_url: Option<String>,
714 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
715 pub provider_info: Option<serde_json::Value>,
716}
717
718#[derive(Debug, Clone, Serialize)]
719pub struct EditAccountRequest {
720 pub name: String,
721 #[serde(skip_serializing_if = "Option::is_none")]
722 pub description: Option<String>,
723 #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
724 pub icon_url: Option<String>,
725 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
726 pub provider_info: Option<serde_json::Value>,
727}
728
729#[derive(Debug, Clone, Serialize)]
730pub struct UpdateAccountQuotaRequest {
731 #[serde(rename = "quotaLimit")]
732 pub quota_limit: i64,
733 #[serde(rename = "quotaExcessPct", skip_serializing_if = "Option::is_none")]
734 pub quota_excess_pct: Option<i32>,
735}
736
737#[derive(Debug, Clone, Default)]
738pub struct AccountListOptions {
739 pub is_active: Option<bool>,
740 pub page: Option<i64>,
741 pub limit: Option<i64>,
742}
743
744#[derive(Debug, Clone, Serialize)]
747pub struct AddUserRequest {
748 #[serde(rename = "accountId")]
749 pub account_id: i64,
750 pub username: String,
751 pub email: String,
752 #[serde(skip_serializing_if = "Option::is_none")]
753 pub name: Option<String>,
754 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
755 pub provider_info: Option<serde_json::Value>,
756}
757
758#[derive(Debug, Clone, Serialize)]
759pub struct BulkUserRequest {
760 pub ids: Vec<i64>,
761}
762
763#[derive(Debug, Clone, Serialize, Deserialize)]
764pub struct BulkUserResponse {
765 pub users: Vec<UserLite>,
766}
767
768#[derive(Debug, Clone, Serialize)]
769pub struct EditUserRequest {
770 pub username: String,
771 pub email: String,
772 #[serde(skip_serializing_if = "Option::is_none")]
773 pub name: Option<String>,
774 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
775 pub provider_info: Option<serde_json::Value>,
776}
777
778#[derive(Debug, Clone, Default)]
779pub struct UserListOptions {
780 pub account_id: i64,
781 pub search: Option<String>,
782 pub is_active: Option<bool>,
783 pub page: Option<i64>,
784 pub limit: Option<i64>,
785}
786
787#[derive(Debug, Clone, Serialize)]
790pub struct CreateRegionRequest {
791 #[serde(rename = "accountId")]
792 pub account_id: i64,
793 pub name: String,
794 pub dns: String,
795}
796
797#[derive(Debug, Clone, Serialize)]
798pub struct EditRegionRequest {
799 #[serde(rename = "accountId")]
800 pub account_id: i64,
801 pub name: String,
802 pub dns: String,
803}
804
805#[derive(Debug, Clone, Default)]
806pub struct RegionListOptions {
807 pub is_active: Option<bool>,
808 pub page: Option<i64>,
809 pub limit: Option<i64>,
810}
811
812#[derive(Debug, Clone, Serialize)]
815pub struct CreateRegionClusterRequest {
816 pub name: String,
817}
818
819#[derive(Debug, Clone, Serialize)]
820pub struct EditRegionClusterRequest {
821 pub name: String,
822}
823
824#[derive(Debug, Clone, Serialize)]
825pub struct SetRegionClusterReadyRequest {
826 pub ready: bool,
827}
828
829#[derive(Debug, Clone, Serialize, Deserialize)]
830pub struct SetReadyRegionClusterResponse {
831 pub id: i64,
832 pub ready: bool,
833}
834
835#[derive(Debug, Clone, Default)]
836pub struct RegionClusterListOptions {
837 pub is_active: Option<bool>,
838 pub page: Option<i64>,
839 pub limit: Option<i64>,
840}
841
842#[derive(Debug, Clone, Serialize)]
845pub struct CreateStorageRequest {
846 #[serde(rename = "accountId")]
847 pub account_id: i64,
848 #[serde(rename = "regionId")]
849 pub region_id: i64,
850 pub name: String,
851 #[serde(skip_serializing_if = "Option::is_none")]
852 pub description: Option<String>,
853 #[serde(rename = "storageType")]
854 pub storage_type: String,
855 #[serde(rename = "providerType")]
856 pub provider_type: String,
857 pub endpoint: String,
858 #[serde(skip_serializing_if = "Option::is_none")]
859 pub region: Option<String>,
860 #[serde(skip_serializing_if = "Option::is_none")]
861 pub bucket: Option<String>,
862 #[serde(skip_serializing_if = "Option::is_none")]
863 pub base: Option<String>,
864 #[serde(rename = "blockRegion", skip_serializing_if = "Option::is_none")]
865 pub block_region: Option<String>,
866 #[serde(rename = "blockSize", skip_serializing_if = "Option::is_none")]
867 pub block_size: Option<i32>,
868 #[serde(skip_serializing_if = "Option::is_none")]
869 pub members: Option<Vec<BlockMember>>,
870 #[serde(rename = "accessKey", skip_serializing_if = "Option::is_none")]
871 pub access_key: Option<String>,
872 #[serde(rename = "secretKey", skip_serializing_if = "Option::is_none")]
873 pub secret_key: Option<String>,
874}
875
876#[derive(Debug, Clone, Serialize, Deserialize)]
877pub struct CreateStorageResponse {
878 pub id: i64,
879 #[serde(rename = "blockVolumeIds", skip_serializing_if = "Option::is_none")]
880 pub block_volume_ids: Option<Vec<String>>,
881}
882
883#[derive(Debug, Clone, Serialize)]
884pub struct EditStorageRequest {
885 pub name: String,
886 #[serde(skip_serializing_if = "Option::is_none")]
887 pub description: Option<String>,
888 #[serde(skip_serializing_if = "Option::is_none")]
889 pub endpoint: Option<String>,
890 #[serde(rename = "accessKey", skip_serializing_if = "Option::is_none")]
891 pub access_key: Option<String>,
892 #[serde(rename = "secretKey", skip_serializing_if = "Option::is_none")]
893 pub secret_key: Option<String>,
894}
895
896#[derive(Debug, Clone, Serialize)]
897pub struct TestStorageBucketRequest {
898 pub endpoint: String,
899 #[serde(skip_serializing_if = "Option::is_none")]
900 pub region: Option<String>,
901 pub bucket: String,
902 #[serde(rename = "accessKey")]
903 pub access_key: String,
904 #[serde(rename = "secretKey")]
905 pub secret_key: String,
906 #[serde(rename = "providerType", skip_serializing_if = "Option::is_none")]
907 pub provider_type: Option<String>,
908}
909
910#[derive(Debug, Clone, Serialize, Deserialize)]
911pub struct TestBucketStorageResponse {
912 #[serde(rename = "bucketExists")]
913 pub bucket_exists: bool,
914 pub list: bool,
915 pub write: bool,
916 pub read: bool,
917 pub delete: bool,
918 pub multipart: bool,
919}
920
921#[derive(Debug, Clone, Serialize, Deserialize)]
922pub struct TestStorageBucketStorageResponse {
923 #[serde(rename = "bucketExists")]
924 pub bucket_exists: bool,
925 pub list: bool,
926 pub write: bool,
927 pub read: bool,
928 pub delete: bool,
929 pub multipart: bool,
930}
931
932#[derive(Debug, Clone, Default)]
933pub struct StorageListOptions {
934 pub account_id: i64,
935 pub search: Option<String>,
936 pub region_id: Option<i64>,
937 pub storage_type: Option<String>,
938 pub provider_type: Option<String>,
939 pub is_active: Option<bool>,
940 pub page: Option<i64>,
941 pub limit: Option<i64>,
942}
943
944#[derive(Debug, Clone, Serialize)]
947pub struct CreateVolumeRequest {
948 #[serde(rename = "accountId")]
949 pub account_id: i64,
950 #[serde(rename = "storageId")]
951 pub storage_id: i64,
952 pub name: String,
953 #[serde(skip_serializing_if = "Option::is_none")]
954 pub description: Option<String>,
955 #[serde(rename = "volumeType")]
956 pub volume_type: String,
957 #[serde(skip_serializing_if = "Option::is_none")]
958 pub encryption: Option<bool>,
959 #[serde(rename = "encryptionKey", skip_serializing_if = "Option::is_none")]
960 pub encryption_key: Option<String>,
961 #[serde(rename = "retentionPeriod", skip_serializing_if = "Option::is_none")]
962 pub retention_period: Option<i32>,
963 #[serde(rename = "gracePeriod", skip_serializing_if = "Option::is_none")]
964 pub grace_period: Option<i32>,
965 #[serde(rename = "forkGracePeriod", skip_serializing_if = "Option::is_none")]
966 pub fork_grace_period: Option<i32>,
967 #[serde(rename = "eventLogRetentionPeriod", skip_serializing_if = "Option::is_none")]
968 pub event_log_retention_period: Option<i32>,
969 #[serde(rename = "quotaLimit", skip_serializing_if = "Option::is_none")]
970 pub quota_limit: Option<i64>,
971 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
972 pub region_cluster_id: Option<i64>,
973 #[serde(rename = "regionClusterUuid", skip_serializing_if = "Option::is_none")]
974 pub region_cluster_uuid: Option<String>,
975}
976
977#[derive(Debug, Clone, Serialize, Deserialize)]
978pub struct CreateVolumeResponse {
979 pub id: i64,
980 #[serde(rename = "encryptionKey", skip_serializing_if = "Option::is_none")]
981 pub encryption_key: Option<String>,
982}
983
984#[derive(Debug, Clone, Serialize)]
985pub struct EditVolumeRequest {
986 #[serde(skip_serializing_if = "Option::is_none")]
987 pub description: Option<String>,
988 #[serde(rename = "retentionPeriod", skip_serializing_if = "Option::is_none")]
989 pub retention_period: Option<i32>,
990 #[serde(rename = "gracePeriod", skip_serializing_if = "Option::is_none")]
991 pub grace_period: Option<i32>,
992 #[serde(rename = "forkGracePeriod", skip_serializing_if = "Option::is_none")]
993 pub fork_grace_period: Option<i32>,
994 #[serde(rename = "eventLogRetentionPeriod", skip_serializing_if = "Option::is_none")]
995 pub event_log_retention_period: Option<i32>,
996}
997
998#[derive(Debug, Clone, Serialize)]
999pub struct MoveVolumeClusterRequest {
1000 #[serde(rename = "targetClusterId", skip_serializing_if = "Option::is_none")]
1001 pub target_cluster_id: Option<i64>,
1002 #[serde(rename = "targetClusterUuid", skip_serializing_if = "Option::is_none")]
1003 pub target_cluster_uuid: Option<String>,
1004}
1005
1006#[derive(Debug, Clone, Serialize, Deserialize)]
1007pub struct MoveClusterVolumeResponse {
1008 pub id: i64,
1009 #[serde(rename = "sourceClusterId")]
1010 pub source_cluster_id: i64,
1011 #[serde(rename = "targetClusterId")]
1012 pub target_cluster_id: i64,
1013 #[serde(rename = "handoverUntil")]
1014 pub handover_until: i64,
1015}
1016
1017#[derive(Debug, Clone, Serialize)]
1018pub struct DeactivateVolumeRequest {
1019 #[serde(rename = "isCleanupMetaEnabled", skip_serializing_if = "Option::is_none")]
1020 pub is_cleanup_meta_enabled: Option<bool>,
1021 #[serde(rename = "isCleanupStorageEnabled", skip_serializing_if = "Option::is_none")]
1022 pub is_cleanup_storage_enabled: Option<bool>,
1023 #[serde(rename = "isCleanupVaultEnabled", skip_serializing_if = "Option::is_none")]
1024 pub is_cleanup_vault_enabled: Option<bool>,
1025}
1026
1027#[derive(Debug, Clone, Serialize)]
1028pub struct GenerateVolumeAPIKeysRequest {
1029 #[serde(rename = "userId")]
1030 pub user_id: i64,
1031}
1032
1033#[derive(Debug, Clone, Serialize, Deserialize)]
1034pub struct GenerateAPIKeysVolumeResponse {
1035 #[serde(rename = "apiKey")]
1036 pub api_key: String,
1037 #[serde(rename = "apiSecret")]
1038 pub api_secret: String,
1039}
1040
1041#[derive(Debug, Clone, Serialize)]
1042pub struct RevokeVolumeAPIKeyRequest {
1043 #[serde(rename = "apiKey")]
1044 pub api_key: String,
1045}
1046
1047#[derive(Debug, Clone, Serialize)]
1048pub struct RevokeVolumeAPIKeysByUserRequest {
1049 #[serde(rename = "userId")]
1050 pub user_id: i64,
1051}
1052
1053#[derive(Debug, Clone, Serialize)]
1054pub struct UpdateVolumeQuotaRequest {
1055 #[serde(rename = "quotaLimit")]
1056 pub quota_limit: i64,
1057}
1058
1059#[derive(Debug, Clone, Serialize, Deserialize)]
1060pub struct StatsVolumeResponse {
1061 #[serde(rename = "volumeId")]
1062 pub volume_id: String,
1063 #[serde(rename = "liveVolume")]
1064 pub live_volume: i64,
1065 #[serde(rename = "totalVolume")]
1066 pub total_volume: i64,
1067 #[serde(rename = "pendingVolume")]
1068 pub pending_volume: i64,
1069 #[serde(rename = "liveInactiveVolume")]
1070 pub live_inactive_volume: i64,
1071}
1072
1073#[derive(Debug, Clone, Serialize, Deserialize)]
1074pub struct SizeHistoryVolumeResponse {
1075 pub points: Vec<VolumeSizePoint>,
1076}
1077
1078#[derive(Debug, Clone, Serialize)]
1079pub struct CreateVolumeForkRequest {
1080 pub name: String,
1081 #[serde(rename = "parentName", skip_serializing_if = "Option::is_none")]
1082 pub parent_name: Option<String>,
1083 #[serde(rename = "asOf", skip_serializing_if = "Option::is_none")]
1084 pub as_of: Option<i64>,
1085 #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1086 pub volume_type: Option<String>,
1087}
1088
1089#[derive(Debug, Clone, Serialize)]
1090pub struct DeleteVolumeForkRequest {
1091 #[serde(skip_serializing_if = "Option::is_none")]
1092 pub force: Option<bool>,
1093 #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1094 pub volume_type: Option<String>,
1095}
1096
1097#[derive(Debug, Clone, Serialize, Deserialize)]
1098pub struct DeleteForkVolumeResponse {
1099 #[serde(rename = "inactivatedFids")]
1100 pub inactivated_fids: Vec<i32>,
1101}
1102
1103#[derive(Debug, Clone, Serialize)]
1104pub struct RestoreVolumeForkRequest {
1105 #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1106 pub volume_type: Option<String>,
1107}
1108
1109#[derive(Debug, Clone, Default)]
1110pub struct VolumeListOptions {
1111 pub account_id: i64,
1112 pub region_id: Option<i64>,
1113 pub region_cluster_id: Option<i64>,
1114 pub storage_id: Option<i64>,
1115 pub volume_type: Option<String>,
1116 pub locked: Option<bool>,
1117 pub is_active: Option<bool>,
1118 pub page: Option<i64>,
1119 pub limit: Option<i64>,
1120}
1121
1122#[derive(Debug, Clone, Default)]
1125pub struct VolumeForkTreeListOptions {
1126 pub path: Option<String>,
1127 pub as_of: Option<i64>,
1128 pub cursor: Option<i64>,
1129 pub limit: Option<i64>,
1130 pub sort: Option<String>,
1131 pub kind: Option<String>,
1132}
1133
1134#[derive(Debug, Clone, Default)]
1137pub struct VolumeForkEntryListOptions {
1138 pub path: Option<String>,
1139 pub cursor: Option<i64>,
1140 pub limit: Option<i64>,
1141}
1142
1143#[derive(Debug, Clone, Default)]
1146pub struct VolumeForkSearchListOptions {
1147 pub q: Option<String>,
1148 pub path: Option<String>,
1149 pub as_of: Option<i64>,
1150 pub exact: Option<bool>,
1151 pub cursor: Option<i64>,
1152 pub limit: Option<i64>,
1153 pub kind: Option<String>,
1154}
1155
1156#[derive(Debug, Clone, Default)]
1159pub struct AuditLogListOptions {
1160 pub account_id: Option<i64>,
1161 pub region_id: Option<i64>,
1162 pub region_cluster_id: Option<i64>,
1163 pub cursor: Option<i64>,
1164 pub limit: Option<i64>,
1165 pub subject: Option<String>,
1166}
1167
1168#[derive(Debug, Clone, Default)]
1171pub struct RegionAuditLogListOptions {
1172 pub region_cluster_id: Option<i64>,
1173 pub cursor: Option<i64>,
1174 pub limit: Option<i64>,
1175 pub subject: Option<String>,
1176 pub node: Option<String>,
1177}
1178
1179#[derive(Debug, Clone, Default)]
1186pub struct ClientSessionListOptions {
1187 pub account_id: Option<i64>,
1188 pub region_id: Option<i64>,
1189 pub region_cluster_id: Option<i64>,
1190 pub volume_id: Option<i64>,
1191 pub user_id: Option<i64>,
1192 pub client_type: Option<String>,
1193 pub status: Option<ClientSessionStatus>,
1194 pub is_active: Option<String>,
1195 pub os_name: Option<String>,
1196 pub platform: Option<String>,
1197 pub search: Option<String>,
1198 pub page: Option<i64>,
1199 pub limit: Option<i64>,
1200}
1201
1202#[derive(Debug, Clone, Default)]
1211pub struct AlertListOptions {
1212 pub active: Option<bool>,
1213 pub account_id: Option<i64>,
1214 pub region_id: Option<i64>,
1215 pub severity: Option<i64>,
1216 pub category: Option<String>,
1217 pub since: Option<String>,
1218 pub page: Option<i64>,
1219 pub limit: Option<i64>,
1220}
1221
1222#[derive(Debug, Clone, Default)]
1225pub struct RegionAlertListOptions {
1226 pub active: Option<bool>,
1227 pub severity: Option<i64>,
1228 pub category: Option<String>,
1229 pub node_id: Option<String>,
1230 pub region_cluster_id: Option<i64>,
1231 pub since: Option<String>,
1232 pub page: Option<i64>,
1233 pub limit: Option<i64>,
1234}
1235
1236