22//! =========
33//! Thse Customers API allows you to create and maange customers on your integration
44
5- use std:: { marker:: PhantomData , sync:: Arc } ;
6-
7- use serde_json:: json;
8-
5+ use super :: PAYSTACK_BASE_URL ;
96use crate :: {
107 CreateCustomerRequest , CustomerResponseData , HttpClient , PaystackAPIError , PaystackResult ,
118 Response , RiskAction , UpdateCustomerRequest , ValidateCustomerRequest ,
129} ;
10+ use serde_json:: json;
11+ use std:: { marker:: PhantomData , sync:: Arc } ;
1312
1413/// A struct to hold all the functions of the customers API endpoint
1514#[ derive( Debug , Clone ) ]
@@ -32,7 +31,7 @@ impl<T: HttpClient + Default> CustomersEndpoints<T> {
3231 /// # Returns
3332 /// A new CustomersEndpoints instance
3433 pub fn new ( key : Arc < String > , http : Arc < T > ) -> CustomersEndpoints < T > {
35- let base_url = String :: from ( "https://api.paystack.co/ customer") ;
34+ let base_url = format ! ( "{}/ customer", PAYSTACK_BASE_URL ) ;
3635 CustomersEndpoints {
3736 key : key. to_string ( ) ,
3837 base_url,
@@ -52,22 +51,20 @@ impl<T: HttpClient + Default> CustomersEndpoints<T> {
5251 & self ,
5352 create_customer_request : CreateCustomerRequest ,
5453 ) -> PaystackResult < CustomerResponseData > {
55- let url = format ! ( "{}" , self . base_url) ;
54+ let url = & self . base_url ;
5655 let body = serde_json:: to_value ( create_customer_request)
5756 . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
5857
59- let response = self . http . post ( & url, & self . key , & body) . await ;
58+ let response = self
59+ . http
60+ . post ( & url, & self . key , & body)
61+ . await
62+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
6063
61- match response {
62- Ok ( response) => {
63- let parsed_response: Response < CustomerResponseData > =
64- serde_json:: from_str ( & response)
65- . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
64+ let parsed_response: Response < CustomerResponseData > = serde_json:: from_str ( & response)
65+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
6666
67- Ok ( parsed_response)
68- }
69- Err ( e) => Err ( PaystackAPIError :: Customer ( e. to_string ( ) ) ) ,
70- }
67+ Ok ( parsed_response)
7168 }
7269
7370 /// Lists customers available on your integration
@@ -83,24 +80,22 @@ impl<T: HttpClient + Default> CustomersEndpoints<T> {
8380 per_page : Option < u8 > ,
8481 page : Option < u8 > ,
8582 ) -> PaystackResult < Vec < CustomerResponseData > > {
86- let url = format ! ( "{}" , self . base_url) ;
83+ let url = & self . base_url ;
8784
8885 let per_page = per_page. unwrap_or ( 50 ) . to_string ( ) ;
8986 let page = page. unwrap_or ( 1 ) . to_string ( ) ;
9087 let query = vec ! [ ( "perPage" , per_page. as_str( ) ) , ( "page" , page. as_str( ) ) ] ;
9188
92- let response = self . http . get ( & url, & self . key , Some ( & query) ) . await ;
89+ let response = self
90+ . http
91+ . get ( & url, & self . key , Some ( & query) )
92+ . await
93+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
9394
94- match response {
95- Ok ( response) => {
96- let parsed_response: Response < Vec < CustomerResponseData > > =
97- serde_json:: from_str ( & response)
98- . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
95+ let parsed_response: Response < Vec < CustomerResponseData > > = serde_json:: from_str ( & response)
96+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
9997
100- Ok ( parsed_response)
101- }
102- Err ( e) => Err ( PaystackAPIError :: Customer ( e. to_string ( ) ) ) ,
103- }
98+ Ok ( parsed_response)
10499 }
105100
106101 /// Gets details of a customer on your integration
@@ -116,18 +111,16 @@ impl<T: HttpClient + Default> CustomersEndpoints<T> {
116111 ) -> PaystackResult < CustomerResponseData > {
117112 let url = format ! ( "{}/{}" , self . base_url, email_or_code) ;
118113
119- let response = self . http . get ( & url, & self . key , None ) . await ;
114+ let response = self
115+ . http
116+ . get ( & url, & self . key , None )
117+ . await
118+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
120119
121- match response {
122- Ok ( response) => {
123- let parsed_response: Response < CustomerResponseData > =
124- serde_json:: from_str ( & response)
125- . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
120+ let parsed_response: Response < CustomerResponseData > = serde_json:: from_str ( & response)
121+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
126122
127- Ok ( parsed_response)
128- }
129- Err ( e) => Err ( PaystackAPIError :: Customer ( e. to_string ( ) ) ) ,
130- }
123+ Ok ( parsed_response)
131124 }
132125
133126 /// Updates a customer's details on your integration
@@ -148,18 +141,16 @@ impl<T: HttpClient + Default> CustomersEndpoints<T> {
148141 let body = serde_json:: to_value ( update_customer_request)
149142 . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
150143
151- let response = self . http . put ( & url, & self . key , & body) . await ;
144+ let response = self
145+ . http
146+ . put ( & url, & self . key , & body)
147+ . await
148+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
152149
153- match response {
154- Ok ( response) => {
155- let parsed_response: Response < CustomerResponseData > =
156- serde_json:: from_str ( & response)
157- . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
150+ let parsed_response: Response < CustomerResponseData > = serde_json:: from_str ( & response)
151+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
158152
159- Ok ( parsed_response)
160- }
161- Err ( e) => Err ( PaystackAPIError :: Customer ( e. to_string ( ) ) ) ,
162- }
153+ Ok ( parsed_response)
163154 }
164155
165156 /// Validates a customer's identity
@@ -180,18 +171,16 @@ impl<T: HttpClient + Default> CustomersEndpoints<T> {
180171 let body = serde_json:: to_value ( customer_validation_request)
181172 . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
182173
183- let response = self . http . post ( & url, & self . key , & body) . await ;
174+ let response = self
175+ . http
176+ . post ( & url, & self . key , & body)
177+ . await
178+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
184179
185- match response {
186- Ok ( response) => {
187- let parsed_response: Response < PhantomData < String > > =
188- serde_json:: from_str ( & response)
189- . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
180+ let parsed_response: Response < PhantomData < String > > = serde_json:: from_str ( & response)
181+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
190182
191- Ok ( parsed_response)
192- }
193- Err ( e) => Err ( PaystackAPIError :: Customer ( e. to_string ( ) ) ) ,
194- }
183+ Ok ( parsed_response)
195184 }
196185
197186 /// Whitelists or blacklists a customer on your integration
@@ -213,18 +202,16 @@ impl<T: HttpClient + Default> CustomersEndpoints<T> {
213202 "risk_action" : risk_action
214203 } ) ;
215204
216- let response = self . http . post ( & url, & self . key , & body) . await ;
205+ let response = self
206+ . http
207+ . post ( & url, & self . key , & body)
208+ . await
209+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
217210
218- match response {
219- Ok ( response) => {
220- let parsed_response: Response < CustomerResponseData > =
221- serde_json:: from_str ( & response)
222- . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
211+ let parsed_response: Response < CustomerResponseData > = serde_json:: from_str ( & response)
212+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
223213
224- Ok ( parsed_response)
225- }
226- Err ( e) => Err ( PaystackAPIError :: Customer ( e. to_string ( ) ) ) ,
227- }
214+ Ok ( parsed_response)
228215 }
229216
230217 /// Deactivates an authorization when the card needs to be forgotten
@@ -243,17 +230,15 @@ impl<T: HttpClient + Default> CustomersEndpoints<T> {
243230 "authorization_code" : authorization_code
244231 } ) ;
245232
246- let response = self . http . post ( & url, & self . key , & body) . await ;
233+ let response = self
234+ . http
235+ . post ( & url, & self . key , & body)
236+ . await
237+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
247238
248- match response {
249- Ok ( response) => {
250- let parsed_response: Response < PhantomData < String > > =
251- serde_json:: from_str ( & response)
252- . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
239+ let parsed_response: Response < PhantomData < String > > = serde_json:: from_str ( & response)
240+ . map_err ( |e| PaystackAPIError :: Customer ( e. to_string ( ) ) ) ?;
253241
254- Ok ( parsed_response)
255- }
256- Err ( e) => Err ( PaystackAPIError :: Customer ( e. to_string ( ) ) ) ,
257- }
242+ Ok ( parsed_response)
258243 }
259244}
0 commit comments