1use crate::{CreateRoleRequest, Result, Role, RoleListResponse, SumUpClient, UpdateRoleRequest};
2
3impl SumUpClient {
4 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 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 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 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) .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 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}