Skip to main content

mountos_admin_sdk/
types_gen.rs

1// Code generated by gen; DO NOT EDIT.
2
3use serde::{Deserialize, Serialize};
4
5/// Client configuration.
6#[derive(Debug, Clone, Default)]
7pub struct Config {
8    /// Base URL of the appserv provider API, e.g. `https://appserv.example.com`.
9    pub base_url: String,
10    /// Base64-encoded ED25519 private key (32-byte seed or 64-byte seed+public key).
11    pub private_key: String,
12    /// Optional dashboard operator context, signed into each request.
13    pub dashboard_user: Option<DashboardUser>,
14    /// Dedicated HMAC secret for the `X-MountOS-Dashboard-User` header (appserv
15    /// `DASHBOARD_USER_HMAC_KEY`); required when `dashboard_user` is set.
16    pub dashboard_hmac_key: Option<String>,
17}
18
19/// Page-based pagination options.
20#[derive(Debug, Clone, Default)]
21pub struct ListOptions {
22    pub page: Option<i64>,
23    pub limit: Option<i64>,
24}
25
26/// Pagination metadata returned by page-based list endpoints.
27#[derive(Debug, Clone, Deserialize)]
28pub struct PaginationMeta {
29    pub page: i64,
30    pub limit: i64,
31    pub total: i64,
32    #[serde(rename = "totalPages")]
33    pub total_pages: i64,
34}
35
36/// Page-based list response.
37#[derive(Debug, Clone, Deserialize)]
38pub struct PaginatedResponse<T> {
39    pub items: Vec<T>,
40    pub pagination: PaginationMeta,
41}
42
43/// Cursor-based list response.
44#[derive(Debug, Clone, Deserialize)]
45pub struct CursorPaginatedResponse<T> {
46    pub items: Vec<T>,
47    #[serde(rename = "nextCursor")]
48    pub next_cursor: Option<i64>,
49}
50
51/// Identifier returned by create/edit/toggle endpoints.
52#[derive(Debug, Clone, Deserialize)]
53pub struct IdResponse {
54    pub id: i64,
55}
56
57/// `ClientSessionStatus` values accepted/returned on the wire.
58pub type ClientSessionStatus = String;
59pub const CLIENT_SESSION_STATUS_CONNECTED: &str = "connected";
60pub const CLIENT_SESSION_STATUS_ACTIVE: &str = "active";
61pub const CLIENT_SESSION_STATUS_DEGRADED: &str = "degraded";
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
66/// `LicenseQuotaState` values accepted/returned on the wire.
67pub type LicenseQuotaState = String;
68pub const LICENSE_QUOTA_STATE_OK: &str = "ok";
69pub const LICENSE_QUOTA_STATE_EXCEEDED: &str = "exceeded";
70
71/// `LicenseStatus` values accepted/returned on the wire.
72pub 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(skip_serializing_if = "Option::is_none")]
100    pub retention: Option<RetentionPolicy>,
101    #[serde(rename = "createdAt")]
102    pub created_at: String,
103    #[serde(rename = "updatedAt")]
104    pub updated_at: String,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
108pub struct User {
109    pub id: i64,
110    #[serde(rename = "accountId")]
111    pub account_id: i64,
112    pub username: String,
113    pub email: String,
114    pub name: String,
115    #[serde(rename = "isActive")]
116    pub is_active: bool,
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize)]
120pub struct Region {
121    pub id: i64,
122    #[serde(rename = "exportId")]
123    pub export_id: String,
124    #[serde(rename = "accountId")]
125    pub account_id: i64,
126    pub name: String,
127    #[serde(rename = "liveVolume")]
128    pub live_volume: i64,
129    #[serde(rename = "totalVolume")]
130    pub total_volume: i64,
131    #[serde(rename = "isActive")]
132    pub is_active: bool,
133    #[serde(rename = "createdAt")]
134    pub created_at: String,
135    #[serde(rename = "updatedAt")]
136    pub updated_at: String,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize)]
140pub struct RegionCluster {
141    pub id: i64,
142    #[serde(rename = "exportId")]
143    pub export_id: String,
144    #[serde(rename = "regionId")]
145    pub region_id: i64,
146    pub name: String,
147    #[serde(rename = "defaultCluster")]
148    pub default_cluster: bool,
149    #[serde(rename = "isReady")]
150    pub is_ready: bool,
151    #[serde(rename = "isActive")]
152    pub is_active: bool,
153    #[serde(rename = "createdAt")]
154    pub created_at: String,
155    #[serde(rename = "updatedAt")]
156    pub updated_at: String,
157}
158
159#[derive(Debug, Clone, Serialize, Deserialize)]
160pub struct Storage {
161    pub id: i64,
162    pub uuid: String,
163    pub account: Ref,
164    #[serde(rename = "regionInfo")]
165    pub region_info: Ref,
166    pub name: String,
167    #[serde(skip_serializing_if = "Option::is_none")]
168    pub description: Option<String>,
169    #[serde(rename = "storageType")]
170    pub storage_type: String,
171    #[serde(rename = "providerType")]
172    pub provider_type: String,
173    pub endpoint: String,
174    #[serde(skip_serializing_if = "Option::is_none")]
175    pub region: Option<String>,
176    #[serde(skip_serializing_if = "Option::is_none")]
177    pub bucket: Option<String>,
178    #[serde(skip_serializing_if = "Option::is_none")]
179    pub base: Option<String>,
180    #[serde(rename = "physicalFingerprint", skip_serializing_if = "Option::is_none")]
181    pub physical_fingerprint: Option<String>,
182    #[serde(rename = "blockRegion", skip_serializing_if = "Option::is_none")]
183    pub block_region: Option<String>,
184    #[serde(rename = "blockSize", skip_serializing_if = "Option::is_none")]
185    pub block_size: Option<i32>,
186    #[serde(rename = "directAccess", skip_serializing_if = "Option::is_none")]
187    pub direct_access: Option<bool>,
188    #[serde(rename = "isActive")]
189    pub is_active: bool,
190    #[serde(rename = "createdAt")]
191    pub created_at: String,
192    #[serde(rename = "updatedAt")]
193    pub updated_at: String,
194}
195
196#[derive(Debug, Clone, Serialize, Deserialize)]
197pub struct BlockVolume {
198    pub id: String,
199    #[serde(skip_serializing_if = "Option::is_none")]
200    pub name: Option<String>,
201    #[serde(rename = "clusterName", skip_serializing_if = "Option::is_none")]
202    pub cluster_name: Option<String>,
203    #[serde(rename = "clusterUuid", skip_serializing_if = "Option::is_none")]
204    pub cluster_uuid: Option<String>,
205    #[serde(rename = "shardId")]
206    pub shard_id: i64,
207    #[serde(rename = "regionClusterId")]
208    pub region_cluster_id: i64,
209    #[serde(rename = "clusterReady")]
210    pub cluster_ready: bool,
211    #[serde(rename = "isActive")]
212    pub is_active: bool,
213    #[serde(rename = "createdAt")]
214    pub created_at: String,
215    #[serde(rename = "updatedAt")]
216    pub updated_at: String,
217}
218
219#[derive(Debug, Clone, Serialize, Deserialize)]
220pub struct Volume {
221    pub id: i64,
222    pub account: Ref,
223    pub storage: Ref,
224    pub region: Ref,
225    #[serde(rename = "regionCluster", skip_serializing_if = "Option::is_none")]
226    pub region_cluster: Option<Ref>,
227    pub name: String,
228    #[serde(skip_serializing_if = "Option::is_none")]
229    pub description: Option<String>,
230    #[serde(rename = "volumeType")]
231    pub volume_type: String,
232    #[serde(rename = "storageType", skip_serializing_if = "Option::is_none")]
233    pub storage_type: Option<String>,
234    pub encryption: bool,
235    #[serde(rename = "quotaLimit")]
236    pub quota_limit: i64,
237    #[serde(rename = "liveVolume")]
238    pub live_volume: i64,
239    #[serde(rename = "totalVolume")]
240    pub total_volume: i64,
241    #[serde(rename = "pendingVolume")]
242    pub pending_volume: i64,
243    #[serde(rename = "liveInactiveVolume")]
244    pub live_inactive_volume: i64,
245    pub locked: bool,
246    pub retention: VolumeRetentionPolicy,
247    #[serde(rename = "isActive")]
248    pub is_active: bool,
249    #[serde(rename = "isCleanupMetaEnabled")]
250    pub is_cleanup_meta_enabled: bool,
251    #[serde(rename = "isCleanupStorageEnabled")]
252    pub is_cleanup_storage_enabled: bool,
253    #[serde(rename = "isCleanupVaultEnabled")]
254    pub is_cleanup_vault_enabled: bool,
255    #[serde(rename = "createdAt")]
256    pub created_at: String,
257    #[serde(rename = "updatedAt")]
258    pub updated_at: String,
259}
260
261#[derive(Debug, Clone, Serialize, Deserialize)]
262pub struct Fork {
263    pub fid: i32,
264    pub name: String,
265    #[serde(rename = "parentFid")]
266    pub parent_fid: i32,
267    #[serde(rename = "parentName")]
268    pub parent_name: String,
269    #[serde(rename = "snapshotTs")]
270    pub snapshot_ts: i64,
271    #[serde(rename = "createdBy", skip_serializing_if = "Option::is_none")]
272    pub created_by: Option<i64>,
273    #[serde(rename = "createdAt")]
274    pub created_at: i64,
275    #[serde(rename = "childrenCount")]
276    pub children_count: i32,
277    #[serde(skip_serializing_if = "Option::is_none")]
278    pub inactive: Option<bool>,
279    #[serde(rename = "inactiveAt", skip_serializing_if = "Option::is_none")]
280    pub inactive_at: Option<i64>,
281    pub status: String,
282    pub size: i64,
283}
284
285#[derive(Debug, Clone, Serialize, Deserialize)]
286pub struct ForkTreeEntry {
287    pub inode: i64,
288    pub name: String,
289    pub kind: String,
290    pub size: i64,
291    pub mtime: i64,
292    pub ctime: i64,
293    #[serde(rename = "creatorId", skip_serializing_if = "Option::is_none")]
294    pub creator_id: Option<i64>,
295    #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
296    pub updater_id: Option<i64>,
297}
298
299#[derive(Debug, Clone, Serialize, Deserialize)]
300pub struct ForkEntryDetail {
301    pub inode: i64,
302    pub path: String,
303    pub name: String,
304    pub kind: String,
305    pub size: i64,
306    pub mtime: i64,
307    pub ctime: i64,
308    pub generation: i64,
309    #[serde(skip_serializing_if = "Option::is_none")]
310    pub owner: Option<String>,
311    #[serde(skip_serializing_if = "Option::is_none")]
312    pub mode: Option<i32>,
313    #[serde(skip_serializing_if = "Option::is_none")]
314    pub xattrs: Option<serde_json::Value>,
315    #[serde(rename = "creatorId", skip_serializing_if = "Option::is_none")]
316    pub creator_id: Option<i64>,
317    #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
318    pub updater_id: Option<i64>,
319}
320
321#[derive(Debug, Clone, Serialize, Deserialize)]
322pub struct ForkEntryVersion {
323    pub generation: i64,
324    pub size: i64,
325    pub mtime: i64,
326    #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
327    pub updater_id: Option<i64>,
328    #[serde(rename = "contentHash", skip_serializing_if = "Option::is_none")]
329    pub content_hash: Option<String>,
330}
331
332#[derive(Debug, Clone, Serialize, Deserialize)]
333pub struct ForkTreeMatch {
334    pub path: String,
335    pub inode: i64,
336    pub kind: String,
337    pub size: i64,
338    pub mtime: i64,
339}
340
341#[derive(Debug, Clone, Serialize, Deserialize)]
342pub struct AuditLog {
343    pub id: i64,
344    pub title: String,
345    #[serde(skip_serializing_if = "Option::is_none")]
346    pub description: Option<String>,
347    #[serde(skip_serializing_if = "Option::is_none")]
348    pub subject: Option<String>,
349    pub success: bool,
350    #[serde(skip_serializing_if = "Option::is_none")]
351    pub data: Option<serde_json::Value>,
352    #[serde(rename = "createdBy", skip_serializing_if = "Option::is_none")]
353    pub created_by: Option<String>,
354    #[serde(skip_serializing_if = "Option::is_none")]
355    pub node: Option<String>,
356    #[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
357    pub account_id: Option<i64>,
358    #[serde(rename = "regionId", skip_serializing_if = "Option::is_none")]
359    pub region_id: Option<i64>,
360    #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
361    pub region_cluster_id: Option<i64>,
362    #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
363    pub created_at: Option<String>,
364    #[serde(rename = "updatedAt", skip_serializing_if = "Option::is_none")]
365    pub updated_at: Option<String>,
366}
367
368#[derive(Debug, Clone, Serialize, Deserialize)]
369pub struct ServiceNode {
370    pub id: i64,
371    #[serde(rename = "regionId")]
372    pub region_id: i64,
373    #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
374    pub region_cluster_id: Option<i64>,
375    #[serde(rename = "serviceType")]
376    pub service_type: String,
377    #[serde(rename = "nodeId")]
378    pub node_id: String,
379    #[serde(rename = "advertiseAddr")]
380    pub advertise_addr: String,
381    #[serde(rename = "rpcAddr", skip_serializing_if = "Option::is_none")]
382    pub rpc_addr: Option<String>,
383    #[serde(skip_serializing_if = "Option::is_none")]
384    pub metadata: Option<serde_json::Value>,
385    #[serde(rename = "metricsEndpoint", skip_serializing_if = "Option::is_none")]
386    pub metrics_endpoint: Option<String>,
387    #[serde(rename = "instanceId", skip_serializing_if = "Option::is_none")]
388    pub instance_id: Option<String>,
389    #[serde(rename = "instanceInfo", skip_serializing_if = "Option::is_none")]
390    pub instance_info: Option<serde_json::Value>,
391    pub status: String,
392    #[serde(rename = "lastHeartbeat", skip_serializing_if = "Option::is_none")]
393    pub last_heartbeat: Option<i64>,
394    #[serde(rename = "isActive")]
395    pub is_active: bool,
396    #[serde(rename = "memUsage", skip_serializing_if = "Option::is_none")]
397    pub mem_usage: Option<f64>,
398    #[serde(rename = "sysLoad", skip_serializing_if = "Option::is_none")]
399    pub sys_load: Option<i64>,
400    #[serde(rename = "binaryVersion", skip_serializing_if = "Option::is_none")]
401    pub binary_version: Option<i32>,
402}
403
404#[derive(Debug, Clone, Serialize, Deserialize)]
405pub struct ClientSession {
406    pub id: i64,
407    pub account: Ref,
408    pub region: Ref,
409    #[serde(rename = "regionCluster", skip_serializing_if = "Option::is_none")]
410    pub region_cluster: Option<Ref>,
411    pub volume: VolumeRef,
412    #[serde(skip_serializing_if = "Option::is_none")]
413    pub user: Option<Ref>,
414    #[serde(rename = "clientType")]
415    pub client_type: String,
416    #[serde(rename = "osName")]
417    pub os_name: String,
418    #[serde(rename = "osVersion", skip_serializing_if = "Option::is_none")]
419    pub os_version: Option<String>,
420    #[serde(rename = "appVersion", skip_serializing_if = "Option::is_none")]
421    pub app_version: Option<String>,
422    #[serde(skip_serializing_if = "Option::is_none")]
423    pub hostname: Option<String>,
424    #[serde(rename = "ipAddr")]
425    pub ip_addr: String,
426    #[serde(rename = "mountMode", skip_serializing_if = "Option::is_none")]
427    pub mount_mode: Option<String>,
428    #[serde(rename = "mountPath", skip_serializing_if = "Option::is_none")]
429    pub mount_path: Option<String>,
430    #[serde(rename = "forkName", skip_serializing_if = "Option::is_none")]
431    pub fork_name: Option<String>,
432    #[serde(rename = "isTemporaryFork")]
433    pub is_temporary_fork: bool,
434    #[serde(skip_serializing_if = "Option::is_none")]
435    pub metadata: Option<serde_json::Value>,
436    #[serde(skip_serializing_if = "Option::is_none")]
437    pub metrics: Option<serde_json::Value>,
438    pub status: ClientSessionStatus,
439    #[serde(rename = "lastHeartbeat", skip_serializing_if = "Option::is_none")]
440    pub last_heartbeat: Option<i64>,
441    #[serde(rename = "connectedAt", skip_serializing_if = "Option::is_none")]
442    pub connected_at: Option<i64>,
443    #[serde(rename = "disconnectedAt", skip_serializing_if = "Option::is_none")]
444    pub disconnected_at: Option<i64>,
445    #[serde(rename = "isActive")]
446    pub is_active: bool,
447}
448
449#[derive(Debug, Clone, Serialize, Deserialize)]
450pub struct SessionSummary {
451    #[serde(rename = "byStatus")]
452    pub by_status: Vec<SessionSummaryStatusEntry>,
453    #[serde(rename = "byPlatform")]
454    pub by_platform: Vec<SessionSummaryFacet>,
455    #[serde(rename = "byOsName")]
456    pub by_os_name: Vec<SessionSummaryFacet>,
457    #[serde(rename = "regionCount")]
458    pub region_count: i64,
459    #[serde(rename = "volumeCount")]
460    pub volume_count: i64,
461    #[serde(rename = "hostCount")]
462    pub host_count: i64,
463    #[serde(rename = "degradedCount")]
464    pub degraded_count: i64,
465}
466
467#[derive(Debug, Clone, Serialize, Deserialize)]
468pub struct DiscoverMetaResponse {
469    #[serde(rename = "regionId")]
470    pub region_id: i64,
471    pub region: String,
472    pub endpoints: Vec<DiscoverEndpoint>,
473}
474
475#[derive(Debug, Clone, Serialize, Deserialize)]
476pub struct MetricsTarget {
477    pub targets: Vec<String>,
478    pub labels: serde_json::Value,
479}
480
481#[derive(Debug, Clone, Serialize, Deserialize)]
482pub struct MetricsTokenResponse {
483    pub token: String,
484}
485
486#[derive(Debug, Clone, Serialize, Deserialize)]
487pub struct DashboardStats {
488    #[serde(rename = "userCount")]
489    pub user_count: i64,
490    #[serde(rename = "volumeCount")]
491    pub volume_count: i64,
492    #[serde(rename = "regionCount")]
493    pub region_count: i64,
494    #[serde(rename = "storageCount")]
495    pub storage_count: i64,
496    #[serde(rename = "totalVolumeUsed")]
497    pub total_volume_used: i64,
498    #[serde(rename = "totalQuotaLimit")]
499    pub total_quota_limit: i64,
500    #[serde(rename = "activeSessionCount")]
501    pub active_session_count: i64,
502    #[serde(rename = "regionBreakdown")]
503    pub region_breakdown: Vec<RegionVolumeMetrics>,
504}
505
506#[derive(Debug, Clone, Serialize, Deserialize)]
507pub struct LicenseDetails {
508    #[serde(rename = "licenseId")]
509    pub license_id: String,
510    pub licensee: String,
511    pub contact: String,
512    #[serde(rename = "licenseType")]
513    pub license_type: String,
514    #[serde(rename = "issuedAt")]
515    pub issued_at: String,
516    #[serde(rename = "expiresAt")]
517    pub expires_at: String,
518    #[serde(rename = "gracePeriodDays")]
519    pub grace_period_days: i64,
520    #[serde(rename = "expiredAccessDays")]
521    pub expired_access_days: i64,
522    #[serde(rename = "maxNodes")]
523    pub max_nodes: i64,
524    #[serde(rename = "maxVolumes")]
525    pub max_volumes: i64,
526    #[serde(rename = "maxUsers")]
527    pub max_users: i64,
528    #[serde(rename = "maxAccounts")]
529    pub max_accounts: i64,
530    #[serde(rename = "maxRegions")]
531    pub max_regions: i64,
532    #[serde(rename = "maxStorageBytes")]
533    pub max_storage_bytes: i64,
534    pub status: LicenseStatus,
535    #[serde(rename = "daysRemaining")]
536    pub days_remaining: i64,
537    #[serde(rename = "graceEndsAt")]
538    pub grace_ends_at: String,
539    #[serde(rename = "graceDaysLeft")]
540    pub grace_days_left: i64,
541    #[serde(rename = "expiredAccessEndsAt")]
542    pub expired_access_ends_at: String,
543    #[serde(rename = "expiredAccessDaysLeft")]
544    pub expired_access_days_left: i64,
545    pub quota: LicenseQuota,
546    #[serde(skip_serializing_if = "Option::is_none")]
547    pub distribution: Option<String>,
548    #[serde(rename = "distributionRef", skip_serializing_if = "Option::is_none")]
549    pub distribution_ref: Option<Vec<String>>,
550    #[serde(rename = "unlimitedStorage", skip_serializing_if = "Option::is_none")]
551    pub unlimited_storage: Option<bool>,
552}
553
554#[derive(Debug, Clone, Serialize, Deserialize)]
555pub struct LicenseTerms {
556    pub terms: String,
557}
558
559#[derive(Debug, Clone, Serialize, Deserialize)]
560pub struct LicenseLoadResult {
561    pub loaded: i64,
562    pub ignored: i64,
563}
564
565#[derive(Debug, Clone, Serialize, Deserialize)]
566pub struct LicenseList {
567    pub items: Vec<LicenseRecord>,
568}
569
570#[derive(Debug, Clone, Serialize, Deserialize)]
571pub struct ServiceAlert {
572    pub id: i64,
573    #[serde(rename = "alertId")]
574    pub alert_id: String,
575    pub source: String,
576    #[serde(rename = "nodeId")]
577    pub node_id: String,
578    pub severity: i64,
579    pub category: String,
580    pub title: String,
581    #[serde(skip_serializing_if = "Option::is_none")]
582    pub description: Option<String>,
583    #[serde(skip_serializing_if = "Option::is_none")]
584    pub region: Option<Ref>,
585    #[serde(skip_serializing_if = "Option::is_none")]
586    pub account: Option<Ref>,
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 AlertCountResponse {
597    pub active: i64,
598    pub recent: i64,
599    #[serde(rename = "infoCount")]
600    pub info_count: i64,
601    #[serde(rename = "warningCount")]
602    pub warning_count: i64,
603    #[serde(rename = "criticalCount")]
604    pub critical_count: i64,
605}
606
607#[derive(Debug, Clone, Serialize, Deserialize)]
608pub struct RegionAlert {
609    pub id: i64,
610    #[serde(rename = "alertId")]
611    pub alert_id: String,
612    pub source: String,
613    #[serde(rename = "nodeId")]
614    pub node_id: String,
615    #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
616    pub region_cluster_id: Option<i64>,
617    pub severity: i64,
618    pub category: String,
619    pub title: String,
620    #[serde(skip_serializing_if = "Option::is_none")]
621    pub description: Option<String>,
622    #[serde(rename = "eventTime")]
623    pub event_time: String,
624    #[serde(rename = "resolvedAt", skip_serializing_if = "Option::is_none")]
625    pub resolved_at: Option<String>,
626    #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
627    pub created_at: Option<String>,
628}
629
630#[derive(Debug, Clone, Serialize, Deserialize)]
631pub struct GCWorkerEvent {
632    pub id: i64,
633    #[serde(rename = "nodeId")]
634    pub node_id: String,
635    #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
636    pub region_cluster_id: Option<i64>,
637    pub goal: String,
638    #[serde(skip_serializing_if = "Option::is_none")]
639    pub sid: Option<i64>,
640    #[serde(skip_serializing_if = "Option::is_none")]
641    pub subject: Option<String>,
642    pub ops: serde_json::Value,
643    #[serde(rename = "durationMs")]
644    pub duration_ms: i64,
645    #[serde(rename = "eventTime")]
646    pub event_time: String,
647    #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
648    pub created_at: Option<String>,
649}
650
651#[derive(Debug, Clone, Serialize, Deserialize)]
652pub struct GCWorkerEventHistogramResponse {
653    pub buckets: Vec<GCWorkerEventBucket>,
654}
655
656#[derive(Debug, Clone, Serialize, Deserialize)]
657pub struct GCWorkerEventGoalsResponse {
658    pub goals: Vec<String>,
659}
660
661#[derive(Debug, Clone, Serialize, Deserialize)]
662pub struct BackfillFailure {
663    #[serde(rename = "shardId")]
664    pub shard_id: i64,
665    pub error: String,
666}
667
668#[derive(Debug, Clone, Serialize, Deserialize)]
669pub struct BlockMember {
670    #[serde(skip_serializing_if = "Option::is_none")]
671    pub name: Option<String>,
672    #[serde(rename = "regionClusterId")]
673    pub region_cluster_id: i64,
674}
675
676#[derive(Debug, Clone, Serialize, Deserialize)]
677pub struct CompatibleStorage {
678    pub id: i64,
679    pub uuid: String,
680    pub name: String,
681    #[serde(rename = "storageType")]
682    pub storage_type: String,
683    #[serde(rename = "providerType")]
684    pub provider_type: String,
685    pub volumes: Vec<CompatibleVolume>,
686}
687
688#[derive(Debug, Clone, Serialize, Deserialize)]
689pub struct CompatibleVolume {
690    pub id: String,
691    pub name: String,
692}
693
694#[derive(Debug, Clone, Serialize, Deserialize)]
695pub struct DashboardUser {
696    pub id: String,
697    pub name: String,
698    #[serde(skip_serializing_if = "Option::is_none")]
699    pub email: Option<String>,
700    pub role: String,
701    #[serde(skip_serializing_if = "Option::is_none")]
702    pub username: Option<String>,
703    #[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
704    pub account_id: Option<i64>,
705    #[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
706    pub user_id: Option<i64>,
707    #[serde(rename = "volumeId", skip_serializing_if = "Option::is_none")]
708    pub volume_id: Option<i64>,
709    #[serde(skip_serializing_if = "Option::is_none")]
710    pub exp: Option<i64>,
711}
712
713#[derive(Debug, Clone, Serialize, Deserialize)]
714pub struct DiscoverEndpoint {
715    #[serde(rename = "nodeId")]
716    pub node_id: String,
717    pub addr: String,
718    pub status: String,
719}
720
721#[derive(Debug, Clone, Serialize, Deserialize)]
722pub struct GCWorkerEventBucket {
723    #[serde(rename = "bucketStart")]
724    pub bucket_start: String,
725    pub goal: String,
726    pub count: i64,
727}
728
729#[derive(Debug, Clone, Serialize, Deserialize)]
730pub struct LicenseQuota {
731    pub state: LicenseQuotaState,
732    #[serde(rename = "liveVolume")]
733    pub live_volume: i64,
734    #[serde(rename = "totalVolume")]
735    pub total_volume: i64,
736    pub generation: i64,
737    #[serde(rename = "lastTransitionAtMs")]
738    pub last_transition_at_ms: i64,
739}
740
741#[derive(Debug, Clone, Serialize, Deserialize)]
742pub struct LicenseRecord {
743    pub key: String,
744    pub licensee: String,
745    pub status: LicenseStatus,
746    #[serde(rename = "issuedAt")]
747    pub issued_at: String,
748    #[serde(rename = "expiresAt")]
749    pub expires_at: String,
750    #[serde(rename = "maxStorageBytes")]
751    pub max_storage_bytes: i64,
752    #[serde(rename = "insertedAt")]
753    pub inserted_at: String,
754}
755
756#[derive(Debug, Clone, Serialize, Deserialize)]
757pub struct MoveVolumeFailure {
758    #[serde(rename = "volumeId")]
759    pub volume_id: String,
760    pub error: String,
761}
762
763#[derive(Debug, Clone, Serialize, Deserialize)]
764pub struct NodeStatsSample {
765    #[serde(rename = "timestampMs")]
766    pub timestamp_ms: i64,
767    #[serde(rename = "intervalMs")]
768    pub interval_ms: i64,
769    #[serde(rename = "loadAvg1")]
770    pub load_avg1: f64,
771    #[serde(rename = "loadAvg5")]
772    pub load_avg5: f64,
773    #[serde(rename = "loadAvg15")]
774    pub load_avg15: f64,
775    #[serde(rename = "memUsage")]
776    pub mem_usage: f64,
777    #[serde(rename = "readIops")]
778    pub read_iops: f64,
779    #[serde(rename = "writeIops")]
780    pub write_iops: f64,
781    #[serde(rename = "netRxBytesPerSec")]
782    pub net_rx_bytes_per_sec: f64,
783    #[serde(rename = "netTxBytesPerSec")]
784    pub net_tx_bytes_per_sec: f64,
785    #[serde(rename = "processCount")]
786    pub process_count: i64,
787    #[serde(rename = "diskUsedBytes", skip_serializing_if = "Option::is_none")]
788    pub disk_used_bytes: Option<i64>,
789    #[serde(rename = "diskTotalBytes", skip_serializing_if = "Option::is_none")]
790    pub disk_total_bytes: Option<i64>,
791    #[serde(rename = "dbLatency1mUs", skip_serializing_if = "Option::is_none")]
792    pub db_latency1m_us: Option<f64>,
793    #[serde(rename = "dbLatency5mUs", skip_serializing_if = "Option::is_none")]
794    pub db_latency5m_us: Option<f64>,
795    #[serde(rename = "dbLatency15mUs", skip_serializing_if = "Option::is_none")]
796    pub db_latency15m_us: Option<f64>,
797    #[serde(rename = "dbQueriesPerSec", skip_serializing_if = "Option::is_none")]
798    pub db_queries_per_sec: Option<f64>,
799    #[serde(rename = "dbConnsInUse", skip_serializing_if = "Option::is_none")]
800    pub db_conns_in_use: Option<i64>,
801    #[serde(rename = "dbConnsMax", skip_serializing_if = "Option::is_none")]
802    pub db_conns_max: Option<i64>,
803    #[serde(rename = "dbConnsIdle", skip_serializing_if = "Option::is_none")]
804    pub db_conns_idle: Option<i64>,
805    #[serde(rename = "dbConnsFree", skip_serializing_if = "Option::is_none")]
806    pub db_conns_free: Option<i64>,
807    #[serde(rename = "dbConnsInUse1m", skip_serializing_if = "Option::is_none")]
808    pub db_conns_in_use1m: Option<f64>,
809    #[serde(rename = "dbConnsInUse5m", skip_serializing_if = "Option::is_none")]
810    pub db_conns_in_use5m: Option<f64>,
811    #[serde(rename = "dbConnsInUse15m", skip_serializing_if = "Option::is_none")]
812    pub db_conns_in_use15m: Option<f64>,
813    #[serde(rename = "dbPingAvgUs", skip_serializing_if = "Option::is_none")]
814    pub db_ping_avg_us: Option<f64>,
815    #[serde(rename = "dbPingMinUs", skip_serializing_if = "Option::is_none")]
816    pub db_ping_min_us: Option<f64>,
817    #[serde(rename = "dbPingMaxUs", skip_serializing_if = "Option::is_none")]
818    pub db_ping_max_us: Option<f64>,
819    #[serde(rename = "dbPingStdDevUs", skip_serializing_if = "Option::is_none")]
820    pub db_ping_std_dev_us: Option<f64>,
821}
822
823#[derive(Debug, Clone, Serialize, Deserialize)]
824pub struct Ref {
825    pub id: i64,
826    pub name: String,
827}
828
829#[derive(Debug, Clone, Serialize, Deserialize)]
830pub struct RegionVolumeMetrics {
831    #[serde(rename = "regionId")]
832    pub region_id: i64,
833    #[serde(rename = "regionName")]
834    pub region_name: String,
835    #[serde(rename = "volumeCount")]
836    pub volume_count: i64,
837    #[serde(rename = "totalVolumeUsed")]
838    pub total_volume_used: i64,
839    #[serde(rename = "totalQuotaLimit")]
840    pub total_quota_limit: i64,
841}
842
843#[derive(Debug, Clone, Serialize, Deserialize)]
844pub struct RetentionPolicy {
845    #[serde(rename = "clientSessionDays", skip_serializing_if = "Option::is_none")]
846    pub client_session_days: Option<i32>,
847}
848
849#[derive(Debug, Clone, Serialize, Deserialize)]
850pub struct SessionSummaryFacet {
851    pub label: String,
852    pub count: i64,
853}
854
855#[derive(Debug, Clone, Serialize, Deserialize)]
856pub struct SessionSummaryStatusEntry {
857    #[serde(rename = "clientType")]
858    pub client_type: String,
859    pub status: String,
860    pub count: i64,
861}
862
863#[derive(Debug, Clone, Serialize, Deserialize)]
864pub struct UserLite {
865    pub id: i64,
866    pub username: String,
867    pub name: String,
868}
869
870#[derive(Debug, Clone, Serialize, Deserialize)]
871pub struct VolumeApiKey {
872    #[serde(rename = "apiKey")]
873    pub api_key: String,
874    #[serde(skip_serializing_if = "Option::is_none")]
875    pub name: Option<String>,
876    #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
877    pub created_at: Option<String>,
878    #[serde(rename = "lastUsedAt", skip_serializing_if = "Option::is_none")]
879    pub last_used_at: Option<String>,
880}
881
882#[derive(Debug, Clone, Serialize, Deserialize)]
883pub struct VolumeRef {
884    pub id: i64,
885    pub name: String,
886    #[serde(skip_serializing_if = "Option::is_none")]
887    pub r#type: Option<String>,
888}
889
890#[derive(Debug, Clone, Serialize, Deserialize)]
891pub struct VolumeRetentionPolicy {
892    #[serde(rename = "dataDays", skip_serializing_if = "Option::is_none")]
893    pub data_days: Option<i32>,
894    #[serde(rename = "graceDays", skip_serializing_if = "Option::is_none")]
895    pub grace_days: Option<i32>,
896    #[serde(rename = "forkGraceDays", skip_serializing_if = "Option::is_none")]
897    pub fork_grace_days: Option<i32>,
898    #[serde(rename = "eventLogDays", skip_serializing_if = "Option::is_none")]
899    pub event_log_days: Option<i32>,
900}
901
902#[derive(Debug, Clone, Serialize, Deserialize)]
903pub struct VolumeSizePoint {
904    #[serde(rename = "bucketEnd")]
905    pub bucket_end: String,
906    #[serde(rename = "liveVolume")]
907    pub live_volume: i64,
908    #[serde(rename = "totalVolume")]
909    pub total_volume: i64,
910    #[serde(rename = "pendingVolume")]
911    pub pending_volume: i64,
912    #[serde(rename = "liveInactiveVolume")]
913    pub live_inactive_volume: i64,
914}
915
916// Accounts
917
918#[derive(Debug, Clone, Serialize)]
919pub struct CreateAccountRequest {
920    pub name: String,
921    #[serde(skip_serializing_if = "Option::is_none")]
922    pub description: Option<String>,
923    #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
924    pub icon_url: Option<String>,
925    #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
926    pub provider_info: Option<serde_json::Value>,
927}
928
929#[derive(Debug, Clone, Serialize)]
930pub struct EditAccountRequest {
931    pub name: String,
932    #[serde(skip_serializing_if = "Option::is_none")]
933    pub description: Option<String>,
934    #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
935    pub icon_url: Option<String>,
936    #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
937    pub provider_info: Option<serde_json::Value>,
938    #[serde(skip_serializing_if = "Option::is_none")]
939    pub retention: Option<RetentionPolicy>,
940}
941
942#[derive(Debug, Clone, Serialize)]
943pub struct UpdateAccountQuotaRequest {
944    #[serde(rename = "quotaLimit")]
945    pub quota_limit: i64,
946    #[serde(rename = "quotaExcessPct", skip_serializing_if = "Option::is_none")]
947    pub quota_excess_pct: Option<i32>,
948}
949
950#[derive(Debug, Clone, Default)]
951pub struct AccountListOptions {
952    pub is_active: Option<bool>,
953    pub page: Option<i64>,
954    pub limit: Option<i64>,
955}
956
957// Users
958
959#[derive(Debug, Clone, Serialize)]
960pub struct AddUserRequest {
961    #[serde(rename = "accountId")]
962    pub account_id: i64,
963    pub username: String,
964    pub email: String,
965    #[serde(skip_serializing_if = "Option::is_none")]
966    pub name: Option<String>,
967    #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
968    pub provider_info: Option<serde_json::Value>,
969}
970
971#[derive(Debug, Clone, Serialize)]
972pub struct BulkUserRequest {
973    pub ids: Vec<i64>,
974}
975
976#[derive(Debug, Clone, Serialize, Deserialize)]
977pub struct BulkUserResponse {
978    pub users: Vec<UserLite>,
979}
980
981#[derive(Debug, Clone, Serialize)]
982pub struct EditUserRequest {
983    pub username: String,
984    pub email: String,
985    #[serde(skip_serializing_if = "Option::is_none")]
986    pub name: Option<String>,
987    #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
988    pub provider_info: Option<serde_json::Value>,
989}
990
991#[derive(Debug, Clone, Default)]
992pub struct UserListOptions {
993    pub account_id: i64,
994    pub search: Option<String>,
995    pub is_active: Option<bool>,
996    pub page: Option<i64>,
997    pub limit: Option<i64>,
998}
999
1000// Regions
1001
1002#[derive(Debug, Clone, Serialize)]
1003pub struct CreateRegionRequest {
1004    #[serde(rename = "accountId")]
1005    pub account_id: i64,
1006    pub name: String,
1007}
1008
1009#[derive(Debug, Clone, Serialize)]
1010pub struct EditRegionRequest {
1011    #[serde(rename = "accountId")]
1012    pub account_id: i64,
1013    pub name: String,
1014}
1015
1016#[derive(Debug, Clone, Default)]
1017pub struct RegionListOptions {
1018    pub account_id: i64,
1019    pub is_active: Option<bool>,
1020    pub page: Option<i64>,
1021    pub limit: Option<i64>,
1022}
1023
1024// Clusters
1025
1026#[derive(Debug, Clone, Default)]
1027pub struct ClusterListOptions {
1028    pub account_id: i64,
1029    pub region_id: Option<i64>,
1030    pub is_active: Option<bool>,
1031    pub page: Option<i64>,
1032    pub limit: Option<i64>,
1033}
1034
1035// RegionClusters
1036
1037#[derive(Debug, Clone, Serialize)]
1038pub struct CreateRegionClusterRequest {
1039    pub name: String,
1040}
1041
1042#[derive(Debug, Clone, Serialize)]
1043pub struct EditRegionClusterRequest {
1044    pub name: String,
1045}
1046
1047#[derive(Debug, Clone, Serialize)]
1048pub struct SetRegionClusterReadyRequest {
1049    pub ready: bool,
1050}
1051
1052#[derive(Debug, Clone, Serialize, Deserialize)]
1053pub struct SetReadyRegionClusterResponse {
1054    pub id: i64,
1055    pub ready: bool,
1056}
1057
1058#[derive(Debug, Clone, Default)]
1059pub struct RegionClusterListOptions {
1060    pub is_active: Option<bool>,
1061    pub page: Option<i64>,
1062    pub limit: Option<i64>,
1063}
1064
1065// Storages
1066
1067#[derive(Debug, Clone, Serialize)]
1068pub struct CreateStorageRequest {
1069    #[serde(rename = "accountId")]
1070    pub account_id: i64,
1071    #[serde(rename = "regionId")]
1072    pub region_id: i64,
1073    pub name: String,
1074    #[serde(skip_serializing_if = "Option::is_none")]
1075    pub description: Option<String>,
1076    #[serde(rename = "storageType")]
1077    pub storage_type: String,
1078    #[serde(rename = "providerType")]
1079    pub provider_type: String,
1080    pub endpoint: String,
1081    #[serde(skip_serializing_if = "Option::is_none")]
1082    pub region: Option<String>,
1083    #[serde(skip_serializing_if = "Option::is_none")]
1084    pub bucket: Option<String>,
1085    #[serde(skip_serializing_if = "Option::is_none")]
1086    pub base: Option<String>,
1087    #[serde(rename = "blockRegion", skip_serializing_if = "Option::is_none")]
1088    pub block_region: Option<String>,
1089    #[serde(rename = "blockSize", skip_serializing_if = "Option::is_none")]
1090    pub block_size: Option<i32>,
1091    #[serde(skip_serializing_if = "Option::is_none")]
1092    pub members: Option<Vec<BlockMember>>,
1093    #[serde(rename = "accessKey", skip_serializing_if = "Option::is_none")]
1094    pub access_key: Option<String>,
1095    #[serde(rename = "secretKey", skip_serializing_if = "Option::is_none")]
1096    pub secret_key: Option<String>,
1097}
1098
1099#[derive(Debug, Clone, Serialize, Deserialize)]
1100pub struct CreateStorageResponse {
1101    pub id: i64,
1102    #[serde(rename = "blockVolumeIds", skip_serializing_if = "Option::is_none")]
1103    pub block_volume_ids: Option<Vec<String>>,
1104}
1105
1106#[derive(Debug, Clone, Serialize)]
1107pub struct EditStorageRequest {
1108    pub name: String,
1109    #[serde(skip_serializing_if = "Option::is_none")]
1110    pub description: Option<String>,
1111    #[serde(skip_serializing_if = "Option::is_none")]
1112    pub endpoint: Option<String>,
1113    #[serde(rename = "accessKey", skip_serializing_if = "Option::is_none")]
1114    pub access_key: Option<String>,
1115    #[serde(rename = "secretKey", skip_serializing_if = "Option::is_none")]
1116    pub secret_key: Option<String>,
1117    #[serde(rename = "directAccess", skip_serializing_if = "Option::is_none")]
1118    pub direct_access: Option<bool>,
1119}
1120
1121#[derive(Debug, Clone, Serialize)]
1122pub struct TestStorageNewBucketRequest {
1123    pub endpoint: String,
1124    #[serde(skip_serializing_if = "Option::is_none")]
1125    pub region: Option<String>,
1126    pub bucket: String,
1127    #[serde(rename = "accessKey")]
1128    pub access_key: String,
1129    #[serde(rename = "secretKey")]
1130    pub secret_key: String,
1131    #[serde(rename = "providerType", skip_serializing_if = "Option::is_none")]
1132    pub provider_type: Option<String>,
1133}
1134
1135#[derive(Debug, Clone, Serialize, Deserialize)]
1136pub struct TestNewBucketStorageResponse {
1137    #[serde(rename = "bucketExists")]
1138    pub bucket_exists: bool,
1139    pub list: bool,
1140    pub write: bool,
1141    pub read: bool,
1142    pub delete: bool,
1143    pub multipart: bool,
1144}
1145
1146#[derive(Debug, Clone, Serialize, Deserialize)]
1147pub struct TestStorageBucketStorageResponse {
1148    #[serde(rename = "bucketExists")]
1149    pub bucket_exists: bool,
1150    pub list: bool,
1151    pub write: bool,
1152    pub read: bool,
1153    pub delete: bool,
1154    pub multipart: bool,
1155}
1156
1157#[derive(Debug, Clone, Serialize, Deserialize)]
1158pub struct ListCompatibleStorageResponse {
1159    pub storages: Vec<CompatibleStorage>,
1160}
1161
1162#[derive(Debug, Clone, Serialize)]
1163pub struct MoveStorageVolumesRequest {
1164    #[serde(rename = "volumeIds")]
1165    pub volume_ids: Vec<String>,
1166}
1167
1168#[derive(Debug, Clone, Serialize, Deserialize)]
1169pub struct MoveVolumesStorageResponse {
1170    pub moved: Vec<String>,
1171    pub failures: Vec<MoveVolumeFailure>,
1172}
1173
1174#[derive(Debug, Clone, Serialize, Deserialize)]
1175pub struct BackfillFingerprintsStorageResponse {
1176    pub scanned: i32,
1177    pub updated: i32,
1178    pub failures: Vec<BackfillFailure>,
1179    #[serde(rename = "hasMore")]
1180    pub has_more: bool,
1181}
1182
1183#[derive(Debug, Clone, Default)]
1184pub struct StorageListOptions {
1185    pub account_id: i64,
1186    pub search: Option<String>,
1187    pub region_id: Option<i64>,
1188    pub storage_type: Option<String>,
1189    pub provider_type: Option<String>,
1190    pub is_active: Option<bool>,
1191    pub direct_access: Option<bool>,
1192    pub page: Option<i64>,
1193    pub limit: Option<i64>,
1194}
1195
1196// Volumes
1197
1198#[derive(Debug, Clone, Serialize)]
1199pub struct CreateVolumeRequest {
1200    #[serde(rename = "accountId")]
1201    pub account_id: i64,
1202    #[serde(rename = "storageId")]
1203    pub storage_id: i64,
1204    pub name: String,
1205    #[serde(skip_serializing_if = "Option::is_none")]
1206    pub description: Option<String>,
1207    #[serde(rename = "volumeType")]
1208    pub volume_type: String,
1209    #[serde(skip_serializing_if = "Option::is_none")]
1210    pub encryption: Option<bool>,
1211    #[serde(rename = "encryptionKey", skip_serializing_if = "Option::is_none")]
1212    pub encryption_key: Option<String>,
1213    #[serde(skip_serializing_if = "Option::is_none")]
1214    pub retention: Option<VolumeRetentionPolicy>,
1215    #[serde(rename = "quotaLimit", skip_serializing_if = "Option::is_none")]
1216    pub quota_limit: Option<i64>,
1217    #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
1218    pub region_cluster_id: Option<i64>,
1219    #[serde(rename = "regionClusterUuid", skip_serializing_if = "Option::is_none")]
1220    pub region_cluster_uuid: Option<String>,
1221}
1222
1223#[derive(Debug, Clone, Serialize, Deserialize)]
1224pub struct CreateVolumeResponse {
1225    pub id: i64,
1226    #[serde(rename = "encryptionKey", skip_serializing_if = "Option::is_none")]
1227    pub encryption_key: Option<String>,
1228}
1229
1230#[derive(Debug, Clone, Serialize)]
1231pub struct EditVolumeRequest {
1232    #[serde(skip_serializing_if = "Option::is_none")]
1233    pub description: Option<String>,
1234    #[serde(skip_serializing_if = "Option::is_none")]
1235    pub retention: Option<VolumeRetentionPolicy>,
1236}
1237
1238#[derive(Debug, Clone, Serialize)]
1239pub struct MoveVolumeClusterRequest {
1240    #[serde(rename = "targetClusterId", skip_serializing_if = "Option::is_none")]
1241    pub target_cluster_id: Option<i64>,
1242    #[serde(rename = "targetClusterUuid", skip_serializing_if = "Option::is_none")]
1243    pub target_cluster_uuid: Option<String>,
1244}
1245
1246#[derive(Debug, Clone, Serialize, Deserialize)]
1247pub struct MoveClusterVolumeResponse {
1248    pub id: i64,
1249    #[serde(rename = "sourceClusterId")]
1250    pub source_cluster_id: i64,
1251    #[serde(rename = "targetClusterId")]
1252    pub target_cluster_id: i64,
1253    #[serde(rename = "handoverUntil")]
1254    pub handover_until: i64,
1255}
1256
1257#[derive(Debug, Clone, Serialize)]
1258pub struct DeactivateVolumeRequest {
1259    #[serde(rename = "isCleanupMetaEnabled", skip_serializing_if = "Option::is_none")]
1260    pub is_cleanup_meta_enabled: Option<bool>,
1261    #[serde(rename = "isCleanupStorageEnabled", skip_serializing_if = "Option::is_none")]
1262    pub is_cleanup_storage_enabled: Option<bool>,
1263    #[serde(rename = "isCleanupVaultEnabled", skip_serializing_if = "Option::is_none")]
1264    pub is_cleanup_vault_enabled: Option<bool>,
1265}
1266
1267#[derive(Debug, Clone, Serialize)]
1268pub struct GenerateVolumeAPIKeysRequest {
1269    #[serde(rename = "userId")]
1270    pub user_id: i64,
1271    #[serde(skip_serializing_if = "Option::is_none")]
1272    pub name: Option<String>,
1273}
1274
1275#[derive(Debug, Clone, Serialize, Deserialize)]
1276pub struct GenerateAPIKeysVolumeResponse {
1277    #[serde(rename = "apiKey")]
1278    pub api_key: String,
1279    #[serde(rename = "apiSecret")]
1280    pub api_secret: String,
1281    #[serde(rename = "evictedApiKeys", skip_serializing_if = "Option::is_none")]
1282    pub evicted_api_keys: Option<Vec<String>>,
1283}
1284
1285#[derive(Debug, Clone, Serialize, Deserialize)]
1286pub struct ListAPIKeysVolumeResponse {
1287    pub keys: Vec<VolumeApiKey>,
1288}
1289
1290#[derive(Debug, Clone, Serialize)]
1291pub struct RevokeVolumeAPIKeyRequest {
1292    #[serde(rename = "apiKey")]
1293    pub api_key: String,
1294}
1295
1296#[derive(Debug, Clone, Serialize)]
1297pub struct RevokeVolumeAPIKeysByUserRequest {
1298    #[serde(rename = "userId")]
1299    pub user_id: i64,
1300}
1301
1302#[derive(Debug, Clone, Serialize)]
1303pub struct GenerateVolumeSttKeyRequest {
1304    #[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
1305    pub user_id: Option<i64>,
1306    #[serde(rename = "expirySeconds")]
1307    pub expiry_seconds: i64,
1308}
1309
1310#[derive(Debug, Clone, Serialize, Deserialize)]
1311pub struct GenerateSttKeyVolumeResponse {
1312    #[serde(rename = "apiKey")]
1313    pub api_key: String,
1314    #[serde(rename = "apiSecret")]
1315    pub api_secret: String,
1316    #[serde(rename = "expiresAt")]
1317    pub expires_at: String,
1318}
1319
1320#[derive(Debug, Clone, Serialize)]
1321pub struct UpdateVolumeQuotaRequest {
1322    #[serde(rename = "quotaLimit")]
1323    pub quota_limit: i64,
1324}
1325
1326#[derive(Debug, Clone, Serialize, Deserialize)]
1327pub struct StatsVolumeResponse {
1328    #[serde(rename = "volumeId")]
1329    pub volume_id: String,
1330    #[serde(rename = "liveVolume")]
1331    pub live_volume: i64,
1332    #[serde(rename = "totalVolume")]
1333    pub total_volume: i64,
1334    #[serde(rename = "pendingVolume")]
1335    pub pending_volume: i64,
1336    #[serde(rename = "liveInactiveVolume")]
1337    pub live_inactive_volume: i64,
1338}
1339
1340#[derive(Debug, Clone, Serialize, Deserialize)]
1341pub struct SizeHistoryVolumeResponse {
1342    pub points: Vec<VolumeSizePoint>,
1343}
1344
1345#[derive(Debug, Clone, Serialize)]
1346pub struct CreateVolumeForkRequest {
1347    pub name: String,
1348    #[serde(rename = "parentName", skip_serializing_if = "Option::is_none")]
1349    pub parent_name: Option<String>,
1350    #[serde(rename = "asOf", skip_serializing_if = "Option::is_none")]
1351    pub as_of: Option<i64>,
1352    #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1353    pub volume_type: Option<String>,
1354}
1355
1356#[derive(Debug, Clone, Serialize)]
1357pub struct DeleteVolumeForkRequest {
1358    #[serde(skip_serializing_if = "Option::is_none")]
1359    pub force: Option<bool>,
1360    #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1361    pub volume_type: Option<String>,
1362}
1363
1364#[derive(Debug, Clone, Serialize, Deserialize)]
1365pub struct DeleteForkVolumeResponse {
1366    #[serde(rename = "inactivatedFids")]
1367    pub inactivated_fids: Vec<i32>,
1368}
1369
1370#[derive(Debug, Clone, Serialize)]
1371pub struct RestoreVolumeForkRequest {
1372    #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1373    pub volume_type: Option<String>,
1374}
1375
1376#[derive(Debug, Clone, Default)]
1377pub struct VolumeListOptions {
1378    pub account_id: i64,
1379    pub region_id: Option<i64>,
1380    pub region_cluster_id: Option<i64>,
1381    pub storage_id: Option<i64>,
1382    pub volume_type: Option<String>,
1383    pub locked: Option<bool>,
1384    pub is_active: Option<bool>,
1385    pub page: Option<i64>,
1386    pub limit: Option<i64>,
1387}
1388
1389// VolumeForkTrees
1390
1391#[derive(Debug, Clone, Default)]
1392pub struct VolumeForkTreeListOptions {
1393    pub path: Option<String>,
1394    pub as_of: Option<i64>,
1395    pub cursor: Option<i64>,
1396    pub limit: Option<i64>,
1397    pub sort: Option<String>,
1398    pub kind: Option<String>,
1399}
1400
1401// VolumeForkEntries
1402
1403#[derive(Debug, Clone, Default)]
1404pub struct VolumeForkEntryListOptions {
1405    pub path: Option<String>,
1406    pub cursor: Option<i64>,
1407    pub limit: Option<i64>,
1408}
1409
1410// VolumeForkSearches
1411
1412#[derive(Debug, Clone, Default)]
1413pub struct VolumeForkSearchListOptions {
1414    pub q: Option<String>,
1415    pub path: Option<String>,
1416    pub as_of: Option<i64>,
1417    pub exact: Option<bool>,
1418    pub cursor: Option<i64>,
1419    pub limit: Option<i64>,
1420    pub kind: Option<String>,
1421}
1422
1423// AuditLogs
1424
1425#[derive(Debug, Clone, Default)]
1426pub struct AuditLogListOptions {
1427    pub account_id: i64,
1428    pub region_id: Option<i64>,
1429    pub region_cluster_id: Option<i64>,
1430    pub cursor: Option<i64>,
1431    pub limit: Option<i64>,
1432    pub subject: Option<String>,
1433}
1434
1435// RegionAuditLogs
1436
1437#[derive(Debug, Clone, Default)]
1438pub struct RegionAuditLogListOptions {
1439    pub region_cluster_id: Option<i64>,
1440    pub cursor: Option<i64>,
1441    pub limit: Option<i64>,
1442    pub subject: Option<String>,
1443    pub node: Option<String>,
1444}
1445
1446// ServiceNodes
1447
1448#[derive(Debug, Clone, Serialize, Deserialize)]
1449pub struct StatsHistoryServiceNodeResponse {
1450    #[serde(rename = "intervalMs")]
1451    pub interval_ms: i64,
1452    pub samples: Vec<NodeStatsSample>,
1453}
1454
1455// Nodes
1456
1457// ClientSessions
1458
1459#[derive(Debug, Clone, Default)]
1460pub struct ClientSessionListOptions {
1461    pub account_id: i64,
1462    pub region_id: Option<i64>,
1463    pub region_cluster_id: Option<i64>,
1464    pub volume_id: Option<i64>,
1465    pub user_id: Option<i64>,
1466    pub client_type: Option<String>,
1467    pub status: Option<ClientSessionStatus>,
1468    pub is_active: Option<bool>,
1469    pub os_name: Option<String>,
1470    pub platform: Option<String>,
1471    pub search: Option<String>,
1472    pub page: Option<i64>,
1473    pub limit: Option<i64>,
1474}
1475
1476// Discover
1477
1478// Metrics
1479
1480#[derive(Debug, Clone, Serialize)]
1481pub struct GenerateMetricTokenRequest {
1482    #[serde(rename = "expirySeconds")]
1483    pub expiry_seconds: i64,
1484}
1485
1486// Dashboard
1487
1488// License
1489
1490#[derive(Debug, Clone, Serialize)]
1491pub struct LoadLicenseRequest {
1492    pub payloads: Vec<String>,
1493}
1494
1495// Alerts
1496
1497#[derive(Debug, Clone, Serialize, Deserialize)]
1498pub struct ResolveAlertResponse {
1499    #[serde(rename = "alertId")]
1500    pub alert_id: String,
1501}
1502
1503#[derive(Debug, Clone, Default)]
1504pub struct AlertListOptions {
1505    pub active: Option<bool>,
1506    pub account_id: Option<i64>,
1507    pub region_id: Option<i64>,
1508    pub severity: Option<i64>,
1509    pub category: Option<String>,
1510    pub since: Option<String>,
1511    pub page: Option<i64>,
1512    pub limit: Option<i64>,
1513}
1514
1515// RegionAlerts
1516
1517#[derive(Debug, Clone, Serialize, Deserialize)]
1518pub struct ResolveRegionAlertResponse {
1519    #[serde(rename = "alertId")]
1520    pub alert_id: String,
1521}
1522
1523#[derive(Debug, Clone, Default)]
1524pub struct RegionAlertListOptions {
1525    pub active: Option<bool>,
1526    pub severity: Option<i64>,
1527    pub category: Option<String>,
1528    pub node_id: Option<String>,
1529    pub region_cluster_id: Option<i64>,
1530    pub since: Option<String>,
1531    pub page: Option<i64>,
1532    pub limit: Option<i64>,
1533}
1534
1535// GCWorkerEvents
1536
1537#[derive(Debug, Clone, Default)]
1538pub struct GCWorkerEventListOptions {
1539    pub node_id: Option<String>,
1540    pub goal: Option<String>,
1541    pub sid: Option<i64>,
1542    pub region_cluster_id: Option<i64>,
1543    pub since: Option<String>,
1544    pub page: Option<i64>,
1545    pub limit: Option<i64>,
1546}
1547
1548// Vault