1use std::{sync::Arc, time::Duration};
2
3use covert_types::methods::system::RenewLeaseParams;
4pub use covert_types::methods::system::{
5 ListLeasesResponse, LookupLeaseResponse, RenewLeaseResponse, RevokedLeaseResponse,
6 RevokedLeasesResponse,
7};
8
9use crate::base::BaseClient;
10
11pub struct Client {
12 client: Arc<BaseClient>,
13}
14
15impl Client {
16 pub(crate) fn new(client: Arc<BaseClient>) -> Self {
17 Self { client }
18 }
19
20 pub async fn renew(
21 &self,
22 lease_id: &str,
23 ttl: Option<Duration>,
24 ) -> Result<RenewLeaseResponse, String> {
25 self.client
26 .put(
27 format!("/sys/leases/renew/{lease_id}"),
28 &RenewLeaseParams { ttl },
29 )
30 .await
31 }
32
33 pub async fn revoke(&self, lease_id: &str) -> Result<RevokedLeaseResponse, String> {
34 self.client
35 .put(format!("/sys/leases/revoke/{lease_id}"), &())
36 .await
37 }
38
39 pub async fn lookup(&self, lease_id: &str) -> Result<LookupLeaseResponse, String> {
40 self.client
41 .get(format!("/sys/leases/lookup/{lease_id}"))
42 .await
43 }
44
45 pub async fn revoke_by_mount(&self, prefix: &str) -> Result<RevokedLeasesResponse, String> {
46 self.client
47 .put(format!("/sys/leases/revoke-mount/{prefix}"), &())
48 .await
49 }
50
51 pub async fn list_by_mount(&self, prefix: &str) -> Result<ListLeasesResponse, String> {
52 self.client
53 .get(format!("/sys/leases/lookup-mount/{prefix}"))
54 .await
55 }
56}