sumup_rs/
members.rs

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