sumup_rs/
roles.rs

1use crate::{CreateRoleRequest, Result, Role, RoleListResponse, SumUpClient, UpdateRoleRequest};
2
3impl SumUpClient {
4    /// Lists all roles for a specific merchant.
5    ///
6    /// # Arguments
7    /// * `merchant_code` - The unique merchant code identifier.
8    pub async fn list_roles(&self, merchant_code: &str) -> Result<RoleListResponse> {
9        let url = self.build_url(&format!("/v0.1/merchants/{}/roles", merchant_code))?;
10
11        let response = self
12            .http_client
13            .get(url)
14            .bearer_auth(&self.api_key)
15            .send()
16            .await?;
17
18        if response.status().is_success() {
19            let roles = response.json::<RoleListResponse>().await?;
20            Ok(roles)
21        } else {
22            self.handle_error(response).await
23        }
24    }
25
26    /// Creates a new role resource for a specific merchant.
27    ///
28    /// # Arguments
29    /// * `merchant_code` - The unique merchant code identifier.
30    /// * `body` - The role details to create.
31    pub async fn create_role(&self, merchant_code: &str, body: &CreateRoleRequest) -> Result<Role> {
32        let url = self.build_url(&format!("/v0.1/merchants/{}/roles", merchant_code))?;
33
34        let response = self
35            .http_client
36            .post(url)
37            .bearer_auth(&self.api_key)
38            .json(body)
39            .send()
40            .await?;
41
42        if response.status().is_success() {
43            let role = response.json::<Role>().await?;
44            Ok(role)
45        } else {
46            self.handle_error(response).await
47        }
48    }
49
50    /// Retrieves an identified role resource for a specific merchant.
51    ///
52    /// # Arguments
53    /// * `merchant_code` - The unique merchant code identifier.
54    /// * `role_id` - The unique role identifier.
55    pub async fn retrieve_role(&self, merchant_code: &str, role_id: &str) -> Result<Role> {
56        let url = self.build_url(&format!(
57            "/v0.1/merchants/{}/roles/{}",
58            merchant_code, role_id
59        ))?;
60
61        let response = self
62            .http_client
63            .get(url)
64            .bearer_auth(&self.api_key)
65            .send()
66            .await?;
67
68        if response.status().is_success() {
69            let role = response.json::<Role>().await?;
70            Ok(role)
71        } else {
72            self.handle_error(response).await
73        }
74    }
75
76    /// Updates an identified role resource for a specific merchant.
77    ///
78    /// # Arguments
79    /// * `merchant_code` - The unique merchant code identifier.
80    /// * `role_id` - The unique role identifier.
81    /// * `body` - The role details to update.
82    pub async fn update_role(
83        &self,
84        merchant_code: &str,
85        role_id: &str,
86        body: &UpdateRoleRequest,
87    ) -> Result<Role> {
88        let url = self.build_url(&format!(
89            "/v0.1/merchants/{}/roles/{}",
90            merchant_code, role_id
91        ))?;
92
93        let response = self
94            .http_client
95            .patch(url) // Note: API spec uses PATCH for updates here
96            .bearer_auth(&self.api_key)
97            .json(body)
98            .send()
99            .await?;
100
101        if response.status().is_success() {
102            let role = response.json::<Role>().await?;
103            Ok(role)
104        } else {
105            self.handle_error(response).await
106        }
107    }
108
109    /// Deletes an identified role resource for a specific merchant.
110    ///
111    /// # Arguments
112    /// * `merchant_code` - The unique merchant code identifier.
113    /// * `role_id` - The unique role identifier.
114    pub async fn delete_role(&self, merchant_code: &str, role_id: &str) -> Result<()> {
115        let url = self.build_url(&format!(
116            "/v0.1/merchants/{}/roles/{}",
117            merchant_code, role_id
118        ))?;
119
120        let response = self
121            .http_client
122            .delete(url)
123            .bearer_auth(&self.api_key)
124            .send()
125            .await?;
126
127        if response.status().is_success() {
128            Ok(())
129        } else {
130            self.handle_error(response).await
131        }
132    }
133}