oxide_api/
roles.rs

1use anyhow::Result;
2
3use crate::Client;
4
5pub struct Roles {
6    pub client: Client,
7}
8
9impl Roles {
10    #[doc(hidden)]
11    pub fn new(client: Client) -> Self {
12        Roles { client }
13    }
14
15    /**
16     * List built-in roles.
17     *
18     * This function performs a `GET` to the `/roles` endpoint.
19     *
20     * **Parameters:**
21     *
22     * * `limit: u32` -- Maximum number of items returned by a single call.
23     * * `page_token: &str` -- Token returned by previous call to retrieve the subsequent page.
24     */
25    pub async fn get_page(&self, limit: u32, page_token: &str) -> Result<Vec<crate::types::Role>> {
26        let mut query_args: Vec<(String, String)> = Default::default();
27        if !limit.to_string().is_empty() {
28            query_args.push(("limit".to_string(), limit.to_string()));
29        }
30        if !page_token.is_empty() {
31            query_args.push(("page_token".to_string(), page_token.to_string()));
32        }
33        let query_ = serde_urlencoded::to_string(&query_args).unwrap();
34        let url = format!("/roles?{}", query_);
35
36        let resp: crate::types::RoleResultsPage = self.client.get(&url, None).await?;
37
38        // Return our response data.
39        Ok(resp.items)
40    }
41
42    /**
43     * List built-in roles.
44     *
45     * This function performs a `GET` to the `/roles` endpoint.
46     *
47     * As opposed to `get`, this function returns all the pages of the request at once.
48     */
49    pub async fn get_all(&self) -> Result<Vec<crate::types::Role>> {
50        let url = "/roles".to_string();
51        let mut resp: crate::types::RoleResultsPage = self.client.get(&url, None).await?;
52
53        let mut items = resp.items;
54        let mut page = resp.next_page;
55
56        // Paginate if we should.
57        while !page.is_empty() {
58            if !url.contains('?') {
59                resp = self
60                    .client
61                    .get(&format!("{}?page={}", url, page), None)
62                    .await?;
63            } else {
64                resp = self
65                    .client
66                    .get(&format!("{}&page={}", url, page), None)
67                    .await?;
68            }
69
70            items.append(&mut resp.items);
71
72            if !resp.next_page.is_empty() && resp.next_page != page {
73                page = resp.next_page.to_string();
74            } else {
75                page = "".to_string();
76            }
77        }
78
79        // Return our response data.
80        Ok(items)
81    }
82
83    /**
84     * Fetch a built-in role.
85     *
86     * This function performs a `GET` to the `/roles/{role_name}` endpoint.
87     *
88     * **Parameters:**
89     *
90     * * `role_name: &str` -- The built-in role's unique name.
91     */
92    pub async fn get(&self, role_name: &str) -> Result<crate::types::Role> {
93        let url = format!(
94            "/roles/{}",
95            crate::progenitor_support::encode_path(role_name),
96        );
97
98        self.client.get(&url, None).await
99    }
100}