nomad_client_rs/api/
acl.rs

1use reqwest::Method;
2
3use crate::api::acl::models::{AclTokenCreateRequest, AclTokenUpdateRequest, AclTokensListParams};
4use crate::models::acl_token::AclToken;
5use crate::{ClientError, NomadClient};
6
7impl NomadClient {
8    pub async fn acl_tokens_list(
9        &self,
10        params: &AclTokensListParams,
11    ) -> Result<Vec<AclToken>, ClientError> {
12        let req = self.request(Method::GET, "/acl/tokens").query(params);
13
14        self.send::<Vec<AclToken>>(req).await
15    }
16
17    pub async fn acl_token_create(
18        &self,
19        req: &AclTokenCreateRequest,
20    ) -> Result<AclToken, ClientError> {
21        let req = self.request(Method::POST, "/acl/token").json(req);
22
23        self.send::<AclToken>(req).await
24    }
25
26    pub async fn acl_token_update(
27        &self,
28        accessor_id: String,
29        req: &AclTokenUpdateRequest,
30    ) -> Result<AclToken, ClientError> {
31        let req = self
32            .request(Method::POST, &format!("/acl/token/{}", accessor_id))
33            .json(req);
34
35        self.send::<AclToken>(req).await
36    }
37
38    pub async fn acl_token_read(&self, accessor_id: String) -> Result<AclToken, ClientError> {
39        let req = self.request(Method::GET, &format!("/acl/token/{}", accessor_id));
40
41        self.send::<AclToken>(req).await
42    }
43
44    pub async fn acl_token_read_self(&self) -> Result<AclToken, ClientError> {
45        let req = self.request(Method::GET, "/acl/token/self");
46
47        self.send::<AclToken>(req).await
48    }
49
50    pub async fn acl_token_delete(&self, accessor_id: String) -> Result<(), ClientError> {
51        let req = self.request(Method::DELETE, &format!("/acl/token/{}", accessor_id));
52
53        self.send_plain(req).await.map(|_| ())
54    }
55}
56
57pub mod models {
58    use serde::Serialize;
59
60    #[derive(Debug, Default, Serialize)]
61    #[serde(rename_all = "camelCase")]
62    pub struct AclTokensListParams {
63        pub global: Option<bool>,
64        pub prefix: Option<String>,
65        #[serde(rename = "next_token")]
66        pub next_token: Option<String>,
67        #[serde(rename = "per_page")]
68        pub per_page: Option<u64>,
69        pub filter: Option<String>,
70        pub reverse: Option<bool>,
71    }
72
73    #[derive(Debug, Serialize)]
74    #[serde(rename_all = "camelCase")]
75    pub struct AclTokenCreateRequest {
76        pub name: Option<String>,
77        pub r#type: AclTokenType,
78        pub policies: Vec<String>,
79        pub global: bool,
80        pub expiration_time: Option<String>,
81        pub expiration_ttl: Option<i64>,
82    }
83
84    #[derive(Debug, Serialize)]
85    #[serde(rename_all = "camelCase")]
86    pub struct AclTokenUpdateRequest {
87        #[serde(rename = "AccessorID")]
88        pub accessor_id: String,
89        pub name: Option<String>,
90        pub r#type: AclTokenType,
91        pub policies: Vec<String>,
92    }
93
94    #[derive(Clone, Debug, Serialize)]
95    #[serde(rename_all = "camelCase")]
96    pub enum AclTokenType {
97        Client,
98        Management,
99    }
100}