Skip to main content

mountos_admin_sdk/
client_gen.rs

1// Code generated by gen; DO NOT EDIT.
2
3#![allow(clippy::too_many_arguments)]
4
5use std::sync::Arc;
6
7use crate::errors::Error;
8use crate::http::ClientInner;
9use crate::types_gen::*;
10
11/// mountOS Admin API client. Construct with [`Client::new`].
12pub struct Client {
13    pub accounts: AccountsService,
14    pub users: UsersService,
15    pub regions: RegionsService,
16    pub clusters: ClustersService,
17    pub region_clusters: RegionClustersService,
18    pub storages: StoragesService,
19    pub volumes: VolumesService,
20    pub volume_fork_trees: VolumeForkTreesService,
21    pub volume_fork_entries: VolumeForkEntriesService,
22    pub volume_fork_searches: VolumeForkSearchesService,
23    pub audit_logs: AuditLogsService,
24    pub region_audit_logs: RegionAuditLogsService,
25    pub service_nodes: ServiceNodesService,
26    pub nodes: NodesService,
27    pub client_sessions: ClientSessionsService,
28    pub discover: DiscoverService,
29    pub metrics: MetricsService,
30    pub dashboard: DashboardService,
31    pub license: LicenseService,
32    pub alerts: AlertsService,
33    pub region_alerts: RegionAlertsService,
34    pub gc_worker_events: GCWorkerEventsService,
35    pub vault: VaultService,
36}
37
38impl Client {
39    /// Create a client from configuration. Fails if the private key is invalid.
40    pub fn new(config: Config) -> Result<Self, Error> {
41        let inner = Arc::new(ClientInner::new(config)?);
42        Ok(Self {
43            accounts: AccountsService { inner: Arc::clone(&inner) },
44            users: UsersService { inner: Arc::clone(&inner) },
45            regions: RegionsService { inner: Arc::clone(&inner) },
46            clusters: ClustersService { inner: Arc::clone(&inner) },
47            region_clusters: RegionClustersService { inner: Arc::clone(&inner) },
48            storages: StoragesService { inner: Arc::clone(&inner) },
49            volumes: VolumesService { inner: Arc::clone(&inner) },
50            volume_fork_trees: VolumeForkTreesService { inner: Arc::clone(&inner) },
51            volume_fork_entries: VolumeForkEntriesService { inner: Arc::clone(&inner) },
52            volume_fork_searches: VolumeForkSearchesService { inner: Arc::clone(&inner) },
53            audit_logs: AuditLogsService { inner: Arc::clone(&inner) },
54            region_audit_logs: RegionAuditLogsService { inner: Arc::clone(&inner) },
55            service_nodes: ServiceNodesService { inner: Arc::clone(&inner) },
56            nodes: NodesService { inner: Arc::clone(&inner) },
57            client_sessions: ClientSessionsService { inner: Arc::clone(&inner) },
58            discover: DiscoverService { inner: Arc::clone(&inner) },
59            metrics: MetricsService { inner: Arc::clone(&inner) },
60            dashboard: DashboardService { inner: Arc::clone(&inner) },
61            license: LicenseService { inner: Arc::clone(&inner) },
62            alerts: AlertsService { inner: Arc::clone(&inner) },
63            region_alerts: RegionAlertsService { inner: Arc::clone(&inner) },
64            gc_worker_events: GCWorkerEventsService { inner: Arc::clone(&inner) },
65            vault: VaultService { inner: Arc::clone(&inner) },
66        })
67    }
68}
69
70/// Operations on the `Accounts` resource.
71pub struct AccountsService {
72    inner: Arc<ClientInner>,
73}
74
75impl AccountsService {
76    pub async fn create(&self, req: &CreateAccountRequest) -> Result<IdResponse, Error> {
77        self.inner.post("/api/v1/accounts/create", req).await
78    }
79
80    pub async fn list(&self, opts: Option<&AccountListOptions>) -> Result<PaginatedResponse<Account>, Error> {
81        let mut query: Vec<(&str, String)> = Vec::new();
82        if let Some(opts) = opts {
83            if let Some(v) = &opts.is_active {
84                query.push(("isActive", v.to_string()));
85            }
86            if let Some(v) = &opts.page {
87                query.push(("page", v.to_string()));
88            }
89            if let Some(v) = &opts.limit {
90                query.push(("limit", v.to_string()));
91            }
92        }
93        self.inner.get("/api/v1/accounts/list", &query).await
94    }
95
96    pub async fn get(&self, account_id: i64) -> Result<Account, Error> {
97        self.inner.get(&format!("/api/v1/accounts/{}", account_id), &[]).await
98    }
99
100    pub async fn edit(&self, account_id: i64, req: &EditAccountRequest) -> Result<IdResponse, Error> {
101        self.inner.put(&format!("/api/v1/accounts/{}/edit", account_id), req).await
102    }
103
104    pub async fn lock(&self, account_id: i64) -> Result<IdResponse, Error> {
105        self.inner.post_empty(&format!("/api/v1/accounts/{}/lock", account_id)).await
106    }
107
108    pub async fn unlock(&self, account_id: i64) -> Result<IdResponse, Error> {
109        self.inner.post_empty(&format!("/api/v1/accounts/{}/unlock", account_id)).await
110    }
111
112    pub async fn deactivate(&self, account_id: i64) -> Result<IdResponse, Error> {
113        self.inner.post_empty(&format!("/api/v1/accounts/{}/deactivate", account_id)).await
114    }
115
116    pub async fn update_quota(&self, account_id: i64, req: &UpdateAccountQuotaRequest) -> Result<IdResponse, Error> {
117        self.inner.put(&format!("/api/v1/accounts/{}/quota", account_id), req).await
118    }
119}
120
121/// Operations on the `Users` resource.
122pub struct UsersService {
123    inner: Arc<ClientInner>,
124}
125
126impl UsersService {
127    pub async fn add(&self, req: &AddUserRequest) -> Result<IdResponse, Error> {
128        self.inner.post("/api/v1/users/add", req).await
129    }
130
131    pub async fn list(&self, opts: &UserListOptions) -> Result<PaginatedResponse<User>, Error> {
132        let mut query: Vec<(&str, String)> = Vec::new();
133        query.push(("accountId", opts.account_id.to_string()));
134        if let Some(v) = &opts.search {
135            query.push(("search", v.to_string()));
136        }
137        if let Some(v) = &opts.is_active {
138            query.push(("isActive", v.to_string()));
139        }
140        if let Some(v) = &opts.page {
141            query.push(("page", v.to_string()));
142        }
143        if let Some(v) = &opts.limit {
144            query.push(("limit", v.to_string()));
145        }
146        self.inner.get("/api/v1/users/list", &query).await
147    }
148
149    pub async fn get(&self, user_id: i64) -> Result<User, Error> {
150        self.inner.get(&format!("/api/v1/users/{}", user_id), &[]).await
151    }
152
153    pub async fn bulk(&self, req: &BulkUserRequest) -> Result<BulkUserResponse, Error> {
154        self.inner.post("/api/v1/users/bulk", req).await
155    }
156
157    pub async fn edit(&self, user_id: i64, req: &EditUserRequest) -> Result<IdResponse, Error> {
158        self.inner.put(&format!("/api/v1/users/{}/edit", user_id), req).await
159    }
160
161    pub async fn deactivate(&self, user_id: i64) -> Result<IdResponse, Error> {
162        self.inner.post_empty(&format!("/api/v1/users/{}/deactivate", user_id)).await
163    }
164}
165
166/// Operations on the `Regions` resource.
167pub struct RegionsService {
168    inner: Arc<ClientInner>,
169}
170
171impl RegionsService {
172    pub async fn create(&self, req: &CreateRegionRequest) -> Result<IdResponse, Error> {
173        self.inner.post("/api/v1/regions/create", req).await
174    }
175
176    pub async fn list(&self, opts: &RegionListOptions) -> Result<PaginatedResponse<Region>, Error> {
177        let mut query: Vec<(&str, String)> = Vec::new();
178        query.push(("accountId", opts.account_id.to_string()));
179        if let Some(v) = &opts.is_active {
180            query.push(("isActive", v.to_string()));
181        }
182        if let Some(v) = &opts.page {
183            query.push(("page", v.to_string()));
184        }
185        if let Some(v) = &opts.limit {
186            query.push(("limit", v.to_string()));
187        }
188        self.inner.get("/api/v1/regions/list", &query).await
189    }
190
191    pub async fn get(&self, region_id: i64) -> Result<Region, Error> {
192        self.inner.get(&format!("/api/v1/regions/{}", region_id), &[]).await
193    }
194
195    pub async fn edit(&self, region_id: i64, req: &EditRegionRequest) -> Result<IdResponse, Error> {
196        self.inner.put(&format!("/api/v1/regions/{}/edit", region_id), req).await
197    }
198
199    pub async fn deactivate(&self, region_id: i64) -> Result<IdResponse, Error> {
200        self.inner.post_empty(&format!("/api/v1/regions/{}/deactivate", region_id)).await
201    }
202}
203
204/// Operations on the `Clusters` resource.
205pub struct ClustersService {
206    inner: Arc<ClientInner>,
207}
208
209impl ClustersService {
210    pub async fn list(&self, opts: &ClusterListOptions) -> Result<PaginatedResponse<RegionCluster>, Error> {
211        let mut query: Vec<(&str, String)> = Vec::new();
212        query.push(("accountId", opts.account_id.to_string()));
213        if let Some(v) = &opts.region_id {
214            query.push(("regionId", v.to_string()));
215        }
216        if let Some(v) = &opts.is_active {
217            query.push(("isActive", v.to_string()));
218        }
219        if let Some(v) = &opts.page {
220            query.push(("page", v.to_string()));
221        }
222        if let Some(v) = &opts.limit {
223            query.push(("limit", v.to_string()));
224        }
225        self.inner.get("/api/v1/clusters/list", &query).await
226    }
227}
228
229/// Operations on the `RegionClusters` resource.
230pub struct RegionClustersService {
231    inner: Arc<ClientInner>,
232}
233
234impl RegionClustersService {
235    pub async fn create(&self, region_id: i64, req: &CreateRegionClusterRequest) -> Result<IdResponse, Error> {
236        self.inner.post(&format!("/api/v1/regions/{}/clusters/create", region_id), req).await
237    }
238
239    pub async fn list(&self, region_id: i64, opts: Option<&RegionClusterListOptions>) -> Result<PaginatedResponse<RegionCluster>, Error> {
240        let mut query: Vec<(&str, String)> = Vec::new();
241        if let Some(opts) = opts {
242            if let Some(v) = &opts.is_active {
243                query.push(("isActive", v.to_string()));
244            }
245            if let Some(v) = &opts.page {
246                query.push(("page", v.to_string()));
247            }
248            if let Some(v) = &opts.limit {
249                query.push(("limit", v.to_string()));
250            }
251        }
252        self.inner.get(&format!("/api/v1/regions/{}/clusters/list", region_id), &query).await
253    }
254
255    pub async fn get(&self, region_id: i64, cluster_id: i64) -> Result<RegionCluster, Error> {
256        self.inner.get(&format!("/api/v1/regions/{}/clusters/{}", region_id, cluster_id), &[]).await
257    }
258
259    pub async fn edit(&self, region_id: i64, cluster_id: i64, req: &EditRegionClusterRequest) -> Result<IdResponse, Error> {
260        self.inner.put(&format!("/api/v1/regions/{}/clusters/{}/edit", region_id, cluster_id), req).await
261    }
262
263    pub async fn set_default(&self, region_id: i64, cluster_id: i64) -> Result<IdResponse, Error> {
264        self.inner.post_empty(&format!("/api/v1/regions/{}/clusters/{}/set-default", region_id, cluster_id)).await
265    }
266
267    pub async fn set_ready(&self, region_id: i64, cluster_id: i64, req: &SetRegionClusterReadyRequest) -> Result<SetReadyRegionClusterResponse, Error> {
268        self.inner.post(&format!("/api/v1/regions/{}/clusters/{}/set-ready", region_id, cluster_id), req).await
269    }
270
271    pub async fn deactivate(&self, region_id: i64, cluster_id: i64) -> Result<IdResponse, Error> {
272        self.inner.post_empty(&format!("/api/v1/regions/{}/clusters/{}/deactivate", region_id, cluster_id)).await
273    }
274}
275
276/// Operations on the `Storages` resource.
277pub struct StoragesService {
278    inner: Arc<ClientInner>,
279}
280
281impl StoragesService {
282    pub async fn create(&self, req: &CreateStorageRequest) -> Result<CreateStorageResponse, Error> {
283        self.inner.post("/api/v1/storages/create", req).await
284    }
285
286    pub async fn list(&self, opts: &StorageListOptions) -> Result<PaginatedResponse<Storage>, Error> {
287        let mut query: Vec<(&str, String)> = Vec::new();
288        query.push(("accountId", opts.account_id.to_string()));
289        if let Some(v) = &opts.search {
290            query.push(("search", v.to_string()));
291        }
292        if let Some(v) = &opts.region_id {
293            query.push(("regionId", v.to_string()));
294        }
295        if let Some(v) = &opts.storage_type {
296            query.push(("storageType", v.to_string()));
297        }
298        if let Some(v) = &opts.provider_type {
299            query.push(("providerType", v.to_string()));
300        }
301        if let Some(v) = &opts.is_active {
302            query.push(("isActive", v.to_string()));
303        }
304        if let Some(v) = &opts.direct_access {
305            query.push(("directAccess", v.to_string()));
306        }
307        if let Some(v) = &opts.page {
308            query.push(("page", v.to_string()));
309        }
310        if let Some(v) = &opts.limit {
311            query.push(("limit", v.to_string()));
312        }
313        self.inner.get("/api/v1/storages/list", &query).await
314    }
315
316    pub async fn get(&self, storage_id: i64) -> Result<Storage, Error> {
317        self.inner.get(&format!("/api/v1/storages/{}", storage_id), &[]).await
318    }
319
320    pub async fn list_block_volumes(&self, storage_id: i64) -> Result<Vec<BlockVolume>, Error> {
321        self.inner.get(&format!("/api/v1/storages/{}/block-volumes", storage_id), &[]).await
322    }
323
324    pub async fn edit(&self, storage_id: i64, req: &EditStorageRequest) -> Result<IdResponse, Error> {
325        self.inner.put(&format!("/api/v1/storages/{}/edit", storage_id), req).await
326    }
327
328    pub async fn deactivate(&self, storage_id: i64) -> Result<IdResponse, Error> {
329        self.inner.post_empty(&format!("/api/v1/storages/{}/deactivate", storage_id)).await
330    }
331
332    pub async fn test_bucket(&self, req: &TestStorageBucketRequest) -> Result<TestBucketStorageResponse, Error> {
333        self.inner.post("/api/v1/storages/test-bucket", req).await
334    }
335
336    pub async fn test_storage_bucket(&self, storage_id: i64) -> Result<TestStorageBucketStorageResponse, Error> {
337        self.inner.post_empty(&format!("/api/v1/storages/{}/test-bucket", storage_id)).await
338    }
339
340    pub async fn list_compatible(&self, storage_id: i64) -> Result<ListCompatibleStorageResponse, Error> {
341        self.inner.get(&format!("/api/v1/storages/{}/compatible", storage_id), &[]).await
342    }
343
344    pub async fn move_volumes(&self, storage_id: i64, req: &MoveStorageVolumesRequest) -> Result<MoveVolumesStorageResponse, Error> {
345        self.inner.post(&format!("/api/v1/storages/{}/move-volumes", storage_id), req).await
346    }
347
348    pub async fn backfill_fingerprints(&self) -> Result<BackfillFingerprintsStorageResponse, Error> {
349        self.inner.post_empty("/api/v1/storages/backfill-fingerprints").await
350    }
351}
352
353/// Operations on the `Volumes` resource.
354pub struct VolumesService {
355    inner: Arc<ClientInner>,
356}
357
358impl VolumesService {
359    pub async fn create(&self, req: &CreateVolumeRequest) -> Result<CreateVolumeResponse, Error> {
360        self.inner.post("/api/v1/volumes/create", req).await
361    }
362
363    pub async fn list(&self, opts: &VolumeListOptions) -> Result<PaginatedResponse<Volume>, Error> {
364        let mut query: Vec<(&str, String)> = Vec::new();
365        query.push(("accountId", opts.account_id.to_string()));
366        if let Some(v) = &opts.region_id {
367            query.push(("regionId", v.to_string()));
368        }
369        if let Some(v) = &opts.region_cluster_id {
370            query.push(("regionClusterId", v.to_string()));
371        }
372        if let Some(v) = &opts.storage_id {
373            query.push(("storageId", v.to_string()));
374        }
375        if let Some(v) = &opts.volume_type {
376            query.push(("volumeType", v.to_string()));
377        }
378        if let Some(v) = &opts.locked {
379            query.push(("locked", v.to_string()));
380        }
381        if let Some(v) = &opts.is_active {
382            query.push(("isActive", v.to_string()));
383        }
384        if let Some(v) = &opts.page {
385            query.push(("page", v.to_string()));
386        }
387        if let Some(v) = &opts.limit {
388            query.push(("limit", v.to_string()));
389        }
390        self.inner.get("/api/v1/volumes/list", &query).await
391    }
392
393    pub async fn get(&self, volume_id: i64) -> Result<Volume, Error> {
394        self.inner.get(&format!("/api/v1/volumes/{}", volume_id), &[]).await
395    }
396
397    pub async fn edit(&self, volume_id: i64, req: &EditVolumeRequest) -> Result<IdResponse, Error> {
398        self.inner.put(&format!("/api/v1/volumes/{}/edit", volume_id), req).await
399    }
400
401    pub async fn lock(&self, volume_id: i64) -> Result<IdResponse, Error> {
402        self.inner.post_empty(&format!("/api/v1/volumes/{}/lock", volume_id)).await
403    }
404
405    pub async fn unlock(&self, volume_id: i64) -> Result<IdResponse, Error> {
406        self.inner.post_empty(&format!("/api/v1/volumes/{}/unlock", volume_id)).await
407    }
408
409    pub async fn move_cluster(&self, volume_id: i64, req: &MoveVolumeClusterRequest) -> Result<MoveClusterVolumeResponse, Error> {
410        self.inner.post(&format!("/api/v1/volumes/{}/move-cluster", volume_id), req).await
411    }
412
413    pub async fn deactivate(&self, volume_id: i64, req: &DeactivateVolumeRequest) -> Result<IdResponse, Error> {
414        self.inner.post(&format!("/api/v1/volumes/{}/deactivate", volume_id), req).await
415    }
416
417    pub async fn activate(&self, volume_id: i64) -> Result<IdResponse, Error> {
418        self.inner.post_empty(&format!("/api/v1/volumes/{}/activate", volume_id)).await
419    }
420
421    pub async fn generate_api_keys(&self, volume_id: i64, req: &GenerateVolumeAPIKeysRequest) -> Result<GenerateAPIKeysVolumeResponse, Error> {
422        self.inner.post(&format!("/api/v1/volumes/{}/api-keys/generate", volume_id), req).await
423    }
424
425    pub async fn list_api_keys(&self, volume_id: i64) -> Result<ListAPIKeysVolumeResponse, Error> {
426        self.inner.get(&format!("/api/v1/volumes/{}/api-keys", volume_id), &[]).await
427    }
428
429    pub async fn revoke_api_key(&self, volume_id: i64, req: &RevokeVolumeAPIKeyRequest) -> Result<(), Error> {
430        self.inner.post::<serde_json::Value, _>(&format!("/api/v1/volumes/{}/api-keys/revoke", volume_id), req).await.map(|_| ())
431    }
432
433    pub async fn revoke_api_keys_by_user(&self, volume_id: i64, req: &RevokeVolumeAPIKeysByUserRequest) -> Result<(), Error> {
434        self.inner.post::<serde_json::Value, _>(&format!("/api/v1/volumes/{}/api-keys/revoke-by-user", volume_id), req).await.map(|_| ())
435    }
436
437    pub async fn generate_stt_key(&self, volume_id: i64, req: &GenerateVolumeSttKeyRequest) -> Result<GenerateSttKeyVolumeResponse, Error> {
438        self.inner.post(&format!("/api/v1/volumes/{}/stt-key/generate", volume_id), req).await
439    }
440
441    pub async fn update_quota(&self, volume_id: i64, req: &UpdateVolumeQuotaRequest) -> Result<IdResponse, Error> {
442        self.inner.put(&format!("/api/v1/volumes/{}/quota", volume_id), req).await
443    }
444
445    pub async fn stats(&self, volume_id: i64) -> Result<StatsVolumeResponse, Error> {
446        self.inner.get(&format!("/api/v1/volumes/{}/stats", volume_id), &[]).await
447    }
448
449    pub async fn size_history(&self, volume_id: i64, from: Option<&str>, to: Option<&str>) -> Result<SizeHistoryVolumeResponse, Error> {
450        let mut query: Vec<(&str, String)> = Vec::new();
451        if let Some(v) = from {
452            query.push(("from", v.to_string()));
453        }
454        if let Some(v) = to {
455            query.push(("to", v.to_string()));
456        }
457        self.inner.get(&format!("/api/v1/volumes/{}/size-history", volume_id), &query).await
458    }
459
460    pub async fn create_fork(&self, volume_id: i64, req: &CreateVolumeForkRequest) -> Result<Fork, Error> {
461        self.inner.post(&format!("/api/v1/volumes/{}/forks/create", volume_id), req).await
462    }
463
464    pub async fn list_forks(&self, volume_id: i64, volume_type: Option<&str>) -> Result<Vec<Fork>, Error> {
465        let mut query: Vec<(&str, String)> = Vec::new();
466        if let Some(v) = volume_type {
467            query.push(("volumeType", v.to_string()));
468        }
469        self.inner.get(&format!("/api/v1/volumes/{}/forks", volume_id), &query).await
470    }
471
472    pub async fn list_all_forks(&self, volume_id: i64, volume_type: Option<&str>) -> Result<Vec<Fork>, Error> {
473        let mut query: Vec<(&str, String)> = Vec::new();
474        if let Some(v) = volume_type {
475            query.push(("volumeType", v.to_string()));
476        }
477        self.inner.get(&format!("/api/v1/volumes/{}/forks?include_inactive=true", volume_id), &query).await
478    }
479
480    pub async fn delete_fork(&self, volume_id: i64, fork_name: &str, req: &DeleteVolumeForkRequest) -> Result<DeleteForkVolumeResponse, Error> {
481        self.inner.post(&format!("/api/v1/volumes/{}/forks/{}/delete", volume_id, fork_name), req).await
482    }
483
484    pub async fn restore_fork(&self, volume_id: i64, fork_name: &str, req: &RestoreVolumeForkRequest) -> Result<Fork, Error> {
485        self.inner.post(&format!("/api/v1/volumes/{}/forks/{}/restore", volume_id, fork_name), req).await
486    }
487}
488
489/// Operations on the `VolumeForkTrees` resource.
490pub struct VolumeForkTreesService {
491    inner: Arc<ClientInner>,
492}
493
494impl VolumeForkTreesService {
495    pub async fn list(&self, volume_id: i64, fork_name: &str, opts: Option<&VolumeForkTreeListOptions>) -> Result<CursorPaginatedResponse<ForkTreeEntry>, Error> {
496        let mut query: Vec<(&str, String)> = Vec::new();
497        if let Some(opts) = opts {
498            if let Some(v) = &opts.path {
499                query.push(("path", v.to_string()));
500            }
501            if let Some(v) = &opts.as_of {
502                query.push(("asOf", v.to_string()));
503            }
504            if let Some(v) = &opts.cursor {
505                query.push(("cursor", v.to_string()));
506            }
507            if let Some(v) = &opts.limit {
508                query.push(("limit", v.to_string()));
509            }
510            if let Some(v) = &opts.sort {
511                query.push(("sort", v.to_string()));
512            }
513            if let Some(v) = &opts.kind {
514                query.push(("kind", v.to_string()));
515            }
516        }
517        self.inner.get(&format!("/api/v1/volumes/{}/forks/{}/tree", volume_id, fork_name), &query).await
518    }
519}
520
521/// Operations on the `VolumeForkEntries` resource.
522pub struct VolumeForkEntriesService {
523    inner: Arc<ClientInner>,
524}
525
526impl VolumeForkEntriesService {
527    pub async fn get(&self, volume_id: i64, fork_name: &str, path: Option<&str>, inode: Option<i64>, as_of: Option<i64>) -> Result<ForkEntryDetail, Error> {
528        let mut query: Vec<(&str, String)> = Vec::new();
529        if let Some(v) = path {
530            query.push(("path", v.to_string()));
531        }
532        if let Some(v) = inode {
533            query.push(("inode", v.to_string()));
534        }
535        if let Some(v) = as_of {
536            query.push(("asOf", v.to_string()));
537        }
538        self.inner.get(&format!("/api/v1/volumes/{}/forks/{}/entry", volume_id, fork_name), &query).await
539    }
540
541    pub async fn versions(&self, volume_id: i64, fork_name: &str, opts: Option<&VolumeForkEntryListOptions>) -> Result<CursorPaginatedResponse<ForkEntryVersion>, Error> {
542        let mut query: Vec<(&str, String)> = Vec::new();
543        if let Some(opts) = opts {
544            if let Some(v) = &opts.path {
545                query.push(("path", v.to_string()));
546            }
547            if let Some(v) = &opts.cursor {
548                query.push(("cursor", v.to_string()));
549            }
550            if let Some(v) = &opts.limit {
551                query.push(("limit", v.to_string()));
552            }
553        }
554        self.inner.get(&format!("/api/v1/volumes/{}/forks/{}/entry/versions", volume_id, fork_name), &query).await
555    }
556}
557
558/// Operations on the `VolumeForkSearches` resource.
559pub struct VolumeForkSearchesService {
560    inner: Arc<ClientInner>,
561}
562
563impl VolumeForkSearchesService {
564    pub async fn find(&self, volume_id: i64, fork_name: &str, opts: Option<&VolumeForkSearchListOptions>) -> Result<CursorPaginatedResponse<ForkTreeMatch>, Error> {
565        let mut query: Vec<(&str, String)> = Vec::new();
566        if let Some(opts) = opts {
567            if let Some(v) = &opts.q {
568                query.push(("q", v.to_string()));
569            }
570            if let Some(v) = &opts.path {
571                query.push(("path", v.to_string()));
572            }
573            if let Some(v) = &opts.as_of {
574                query.push(("asOf", v.to_string()));
575            }
576            if let Some(v) = &opts.exact {
577                query.push(("exact", v.to_string()));
578            }
579            if let Some(v) = &opts.cursor {
580                query.push(("cursor", v.to_string()));
581            }
582            if let Some(v) = &opts.limit {
583                query.push(("limit", v.to_string()));
584            }
585            if let Some(v) = &opts.kind {
586                query.push(("kind", v.to_string()));
587            }
588        }
589        self.inner.get(&format!("/api/v1/volumes/{}/forks/{}/search", volume_id, fork_name), &query).await
590    }
591}
592
593/// Operations on the `AuditLogs` resource.
594pub struct AuditLogsService {
595    inner: Arc<ClientInner>,
596}
597
598impl AuditLogsService {
599    pub async fn list(&self, opts: &AuditLogListOptions) -> Result<CursorPaginatedResponse<AuditLog>, Error> {
600        let mut query: Vec<(&str, String)> = Vec::new();
601        query.push(("accountId", opts.account_id.to_string()));
602        if let Some(v) = &opts.region_id {
603            query.push(("regionId", v.to_string()));
604        }
605        if let Some(v) = &opts.region_cluster_id {
606            query.push(("regionClusterId", v.to_string()));
607        }
608        if let Some(v) = &opts.cursor {
609            query.push(("cursor", v.to_string()));
610        }
611        if let Some(v) = &opts.limit {
612            query.push(("limit", v.to_string()));
613        }
614        if let Some(v) = &opts.subject {
615            query.push(("subject", v.to_string()));
616        }
617        self.inner.get("/api/v1/audit-logs/list", &query).await
618    }
619}
620
621/// Operations on the `RegionAuditLogs` resource.
622pub struct RegionAuditLogsService {
623    inner: Arc<ClientInner>,
624}
625
626impl RegionAuditLogsService {
627    pub async fn list(&self, region_id: i64, opts: Option<&RegionAuditLogListOptions>) -> Result<CursorPaginatedResponse<AuditLog>, Error> {
628        let mut query: Vec<(&str, String)> = Vec::new();
629        if let Some(opts) = opts {
630            if let Some(v) = &opts.region_cluster_id {
631                query.push(("regionClusterId", v.to_string()));
632            }
633            if let Some(v) = &opts.cursor {
634                query.push(("cursor", v.to_string()));
635            }
636            if let Some(v) = &opts.limit {
637                query.push(("limit", v.to_string()));
638            }
639            if let Some(v) = &opts.subject {
640                query.push(("subject", v.to_string()));
641            }
642            if let Some(v) = &opts.node {
643                query.push(("node", v.to_string()));
644            }
645        }
646        self.inner.get(&format!("/api/v1/regions/{}/audit-logs/list", region_id), &query).await
647    }
648}
649
650/// Operations on the `ServiceNodes` resource.
651pub struct ServiceNodesService {
652    inner: Arc<ClientInner>,
653}
654
655impl ServiceNodesService {
656    pub async fn list(&self, region_id: i64, service_type: Option<&str>, status: Option<&str>, inactive_hours: Option<i64>, region_cluster_id: Option<i64>) -> Result<Vec<ServiceNode>, Error> {
657        let mut query: Vec<(&str, String)> = Vec::new();
658        if let Some(v) = service_type {
659            query.push(("serviceType", v.to_string()));
660        }
661        if let Some(v) = status {
662            query.push(("status", v.to_string()));
663        }
664        if let Some(v) = inactive_hours {
665            query.push(("inactiveHours", v.to_string()));
666        }
667        if let Some(v) = region_cluster_id {
668            query.push(("regionClusterId", v.to_string()));
669        }
670        self.inner.get(&format!("/api/v1/regions/{}/nodes", region_id), &query).await
671    }
672
673    pub async fn stats(&self, region_id: i64, node_id: &str) -> Result<String, Error> {
674        self.inner.get(&format!("/api/v1/regions/{}/nodes/{}/stats", region_id, crate::http::encode_segment(node_id)), &[]).await
675    }
676
677    pub async fn stats_history(&self, region_id: i64, node_id: &str) -> Result<StatsHistoryServiceNodeResponse, Error> {
678        self.inner.get(&format!("/api/v1/regions/{}/nodes/{}/stats/history", region_id, crate::http::encode_segment(node_id)), &[]).await
679    }
680}
681
682/// Operations on the `Nodes` resource.
683pub struct NodesService {
684    inner: Arc<ClientInner>,
685}
686
687impl NodesService {
688    pub async fn list_all(&self, account_id: i64, service_type: Option<&str>, status: Option<&str>, inactive_hours: Option<i64>) -> Result<Vec<ServiceNode>, Error> {
689        let mut query: Vec<(&str, String)> = Vec::new();
690        query.push(("accountId", account_id.to_string()));
691        if let Some(v) = service_type {
692            query.push(("serviceType", v.to_string()));
693        }
694        if let Some(v) = status {
695            query.push(("status", v.to_string()));
696        }
697        if let Some(v) = inactive_hours {
698            query.push(("inactiveHours", v.to_string()));
699        }
700        self.inner.get("/api/v1/nodes", &query).await
701    }
702}
703
704/// Operations on the `ClientSessions` resource.
705pub struct ClientSessionsService {
706    inner: Arc<ClientInner>,
707}
708
709impl ClientSessionsService {
710    pub async fn list(&self, opts: &ClientSessionListOptions) -> Result<PaginatedResponse<ClientSession>, Error> {
711        let mut query: Vec<(&str, String)> = Vec::new();
712        query.push(("accountId", opts.account_id.to_string()));
713        if let Some(v) = &opts.region_id {
714            query.push(("regionId", v.to_string()));
715        }
716        if let Some(v) = &opts.region_cluster_id {
717            query.push(("regionClusterId", v.to_string()));
718        }
719        if let Some(v) = &opts.volume_id {
720            query.push(("volumeId", v.to_string()));
721        }
722        if let Some(v) = &opts.user_id {
723            query.push(("userId", v.to_string()));
724        }
725        if let Some(v) = &opts.client_type {
726            query.push(("clientType", v.to_string()));
727        }
728        if let Some(v) = &opts.status {
729            query.push(("status", v.to_string()));
730        }
731        if let Some(v) = &opts.is_active {
732            query.push(("isActive", v.to_string()));
733        }
734        if let Some(v) = &opts.os_name {
735            query.push(("osName", v.to_string()));
736        }
737        if let Some(v) = &opts.platform {
738            query.push(("platform", v.to_string()));
739        }
740        if let Some(v) = &opts.search {
741            query.push(("search", v.to_string()));
742        }
743        if let Some(v) = &opts.page {
744            query.push(("page", v.to_string()));
745        }
746        if let Some(v) = &opts.limit {
747            query.push(("limit", v.to_string()));
748        }
749        self.inner.get("/api/v1/client-sessions/list", &query).await
750    }
751
752    pub async fn get(&self, session_id: i64) -> Result<ClientSession, Error> {
753        self.inner.get(&format!("/api/v1/client-sessions/{}", session_id), &[]).await
754    }
755
756    pub async fn summary(&self, account_id: i64, region_id: Option<i64>, region_cluster_id: Option<i64>, volume_id: Option<i64>, user_id: Option<i64>) -> Result<SessionSummary, Error> {
757        let mut query: Vec<(&str, String)> = Vec::new();
758        query.push(("accountId", account_id.to_string()));
759        if let Some(v) = region_id {
760            query.push(("regionId", v.to_string()));
761        }
762        if let Some(v) = region_cluster_id {
763            query.push(("regionClusterId", v.to_string()));
764        }
765        if let Some(v) = volume_id {
766            query.push(("volumeId", v.to_string()));
767        }
768        if let Some(v) = user_id {
769            query.push(("userId", v.to_string()));
770        }
771        self.inner.get("/api/v1/client-sessions/summary", &query).await
772    }
773}
774
775/// Operations on the `Discover` resource.
776pub struct DiscoverService {
777    inner: Arc<ClientInner>,
778}
779
780impl DiscoverService {
781    pub async fn meta(&self, access_key_id: &str) -> Result<DiscoverMetaResponse, Error> {
782        let mut query: Vec<(&str, String)> = Vec::new();
783        query.push(("access_key_id", access_key_id.to_string()));
784        self.inner.get("/api/v1/discover/meta", &query).await
785    }
786
787    pub async fn metrics_targets(&self) -> Result<Vec<MetricsTarget>, Error> {
788        self.inner.get("/api/v1/discover/metrics-targets", &[]).await
789    }
790}
791
792/// Operations on the `Metrics` resource.
793pub struct MetricsService {
794    inner: Arc<ClientInner>,
795}
796
797impl MetricsService {
798    pub async fn generate_token(&self, req: &GenerateMetricTokenRequest) -> Result<MetricsTokenResponse, Error> {
799        self.inner.post("/api/v1/metrics/token", req).await
800    }
801}
802
803/// Operations on the `Dashboard` resource.
804pub struct DashboardService {
805    inner: Arc<ClientInner>,
806}
807
808impl DashboardService {
809    pub async fn stats(&self, account_id: i64) -> Result<DashboardStats, Error> {
810        let mut query: Vec<(&str, String)> = Vec::new();
811        query.push(("accountId", account_id.to_string()));
812        self.inner.get("/api/v1/dashboard/stats", &query).await
813    }
814}
815
816/// Operations on the `License` resource.
817pub struct LicenseService {
818    inner: Arc<ClientInner>,
819}
820
821impl LicenseService {
822    pub async fn get(&self) -> Result<LicenseDetails, Error> {
823        self.inner.get("/api/v1/license", &[]).await
824    }
825
826    pub async fn terms(&self) -> Result<LicenseTerms, Error> {
827        self.inner.get("/api/v1/license/terms", &[]).await
828    }
829
830    pub async fn load(&self, req: &LoadLicenseRequest) -> Result<LicenseLoadResult, Error> {
831        self.inner.post("/api/v1/license/load", req).await
832    }
833
834    pub async fn list(&self) -> Result<LicenseList, Error> {
835        self.inner.get("/api/v1/license/list", &[]).await
836    }
837}
838
839/// Operations on the `Alerts` resource.
840pub struct AlertsService {
841    inner: Arc<ClientInner>,
842}
843
844impl AlertsService {
845    pub async fn list(&self, opts: Option<&AlertListOptions>) -> Result<PaginatedResponse<ServiceAlert>, Error> {
846        let mut query: Vec<(&str, String)> = Vec::new();
847        if let Some(opts) = opts {
848            if let Some(v) = &opts.active {
849                query.push(("active", v.to_string()));
850            }
851            if let Some(v) = &opts.account_id {
852                query.push(("accountId", v.to_string()));
853            }
854            if let Some(v) = &opts.region_id {
855                query.push(("regionId", v.to_string()));
856            }
857            if let Some(v) = &opts.severity {
858                query.push(("severity", v.to_string()));
859            }
860            if let Some(v) = &opts.category {
861                query.push(("category", v.to_string()));
862            }
863            if let Some(v) = &opts.since {
864                query.push(("since", v.to_string()));
865            }
866            if let Some(v) = &opts.page {
867                query.push(("page", v.to_string()));
868            }
869            if let Some(v) = &opts.limit {
870                query.push(("limit", v.to_string()));
871            }
872        }
873        self.inner.get("/api/v1/alerts/list", &query).await
874    }
875
876    pub async fn count(&self) -> Result<AlertCountResponse, Error> {
877        self.inner.get("/api/v1/alerts/count", &[]).await
878    }
879
880    pub async fn resolve(&self, alert_id: &str) -> Result<(), Error> {
881        self.inner.post_empty::<serde_json::Value>(&format!("/api/v1/alerts/{}/resolve", alert_id)).await.map(|_| ())
882    }
883}
884
885/// Operations on the `RegionAlerts` resource.
886pub struct RegionAlertsService {
887    inner: Arc<ClientInner>,
888}
889
890impl RegionAlertsService {
891    pub async fn list(&self, region_id: i64, opts: Option<&RegionAlertListOptions>) -> Result<PaginatedResponse<RegionAlert>, Error> {
892        let mut query: Vec<(&str, String)> = Vec::new();
893        if let Some(opts) = opts {
894            if let Some(v) = &opts.active {
895                query.push(("active", v.to_string()));
896            }
897            if let Some(v) = &opts.severity {
898                query.push(("severity", v.to_string()));
899            }
900            if let Some(v) = &opts.category {
901                query.push(("category", v.to_string()));
902            }
903            if let Some(v) = &opts.node_id {
904                query.push(("nodeId", v.to_string()));
905            }
906            if let Some(v) = &opts.region_cluster_id {
907                query.push(("regionClusterId", v.to_string()));
908            }
909            if let Some(v) = &opts.since {
910                query.push(("since", v.to_string()));
911            }
912            if let Some(v) = &opts.page {
913                query.push(("page", v.to_string()));
914            }
915            if let Some(v) = &opts.limit {
916                query.push(("limit", v.to_string()));
917            }
918        }
919        self.inner.get(&format!("/api/v1/regions/{}/alerts/list", region_id), &query).await
920    }
921
922    pub async fn count(&self, region_id: i64, region_cluster_id: Option<i64>) -> Result<AlertCountResponse, Error> {
923        let mut query: Vec<(&str, String)> = Vec::new();
924        if let Some(v) = region_cluster_id {
925            query.push(("regionClusterId", v.to_string()));
926        }
927        self.inner.get(&format!("/api/v1/regions/{}/alerts/count", region_id), &query).await
928    }
929
930    pub async fn resolve(&self, region_id: i64, alert_id: &str) -> Result<(), Error> {
931        self.inner.post_empty::<serde_json::Value>(&format!("/api/v1/regions/{}/alerts/{}/resolve", region_id, alert_id)).await.map(|_| ())
932    }
933}
934
935/// Operations on the `GCWorkerEvents` resource.
936pub struct GCWorkerEventsService {
937    inner: Arc<ClientInner>,
938}
939
940impl GCWorkerEventsService {
941    pub async fn list(&self, region_id: i64, opts: Option<&GCWorkerEventListOptions>) -> Result<PaginatedResponse<GCWorkerEvent>, Error> {
942        let mut query: Vec<(&str, String)> = Vec::new();
943        if let Some(opts) = opts {
944            if let Some(v) = &opts.node_id {
945                query.push(("nodeId", v.to_string()));
946            }
947            if let Some(v) = &opts.goal {
948                query.push(("goal", v.to_string()));
949            }
950            if let Some(v) = &opts.sid {
951                query.push(("sid", v.to_string()));
952            }
953            if let Some(v) = &opts.region_cluster_id {
954                query.push(("regionClusterId", v.to_string()));
955            }
956            if let Some(v) = &opts.since {
957                query.push(("since", v.to_string()));
958            }
959            if let Some(v) = &opts.page {
960                query.push(("page", v.to_string()));
961            }
962            if let Some(v) = &opts.limit {
963                query.push(("limit", v.to_string()));
964            }
965        }
966        self.inner.get(&format!("/api/v1/regions/{}/gc-worker-events/list", region_id), &query).await
967    }
968
969    pub async fn histogram(&self, region_id: i64, node_id: Option<&str>, goal: Option<&str>, sid: Option<i64>, region_cluster_id: Option<i64>, since: Option<&str>, bucket_seconds: Option<i64>) -> Result<GCWorkerEventHistogramResponse, Error> {
970        let mut query: Vec<(&str, String)> = Vec::new();
971        if let Some(v) = node_id {
972            query.push(("nodeId", v.to_string()));
973        }
974        if let Some(v) = goal {
975            query.push(("goal", v.to_string()));
976        }
977        if let Some(v) = sid {
978            query.push(("sid", v.to_string()));
979        }
980        if let Some(v) = region_cluster_id {
981            query.push(("regionClusterId", v.to_string()));
982        }
983        if let Some(v) = since {
984            query.push(("since", v.to_string()));
985        }
986        if let Some(v) = bucket_seconds {
987            query.push(("bucketSeconds", v.to_string()));
988        }
989        self.inner.get(&format!("/api/v1/regions/{}/gc-worker-events/histogram", region_id), &query).await
990    }
991
992    pub async fn goals(&self, region_id: i64, node_id: Option<&str>) -> Result<GCWorkerEventGoalsResponse, Error> {
993        let mut query: Vec<(&str, String)> = Vec::new();
994        if let Some(v) = node_id {
995            query.push(("nodeId", v.to_string()));
996        }
997        self.inner.get(&format!("/api/v1/regions/{}/gc-worker-events/goals", region_id), &query).await
998    }
999}
1000
1001/// Operations on the `Vault` resource.
1002pub struct VaultService {
1003    inner: Arc<ClientInner>,
1004}
1005
1006impl VaultService {
1007    pub async fn resync(&self) -> Result<(), Error> {
1008        self.inner.post_empty::<serde_json::Value>("/api/v1/vault/resync").await.map(|_| ())
1009    }
1010}