paystack/endpoints/
apple_pay.rs1use super::PAYSTACK_BASE_URL;
5use crate::{ApplePayResponseData, HttpClient, PaystackAPIError, PaystackResult};
6use serde_json::json;
7use std::{marker::PhantomData, sync::Arc};
8
9#[derive(Debug, Clone)]
10pub struct ApplePayEndpoints<T: HttpClient + Default> {
11 key: String,
13 base_url: String,
15 http: Arc<T>,
17}
18
19impl<T: HttpClient + Default> ApplePayEndpoints<T> {
20 pub fn new(key: Arc<String>, http: Arc<T>) -> ApplePayEndpoints<T> {
30 let base_url = format!("{PAYSTACK_BASE_URL}/apple-pay/domain");
31 ApplePayEndpoints {
32 key: key.to_string(),
33 base_url,
34 http,
35 }
36 }
37
38 pub async fn register_domain(
46 &self,
47 domain_name: String,
48 ) -> PaystackResult<PhantomData<String>> {
49 let url = &self.base_url;
50 let body = json!({
51 "domainName": domain_name
52 });
53
54 let response = self
55 .http
56 .post(url, &self.key, &body)
57 .await
58 .map_err(|e| PaystackAPIError::ApplePay(e.to_string()))?;
59
60 let parsed_response = serde_json::from_str(&response)
61 .map_err(|e| PaystackAPIError::ApplePay(e.to_string()))?;
62
63 Ok(parsed_response)
64 }
65
66 pub async fn list_domains(&self) -> PaystackResult<ApplePayResponseData> {
71 let url = &self.base_url;
72
73 let response = self
74 .http
75 .get(url, &self.key, None)
76 .await
77 .map_err(|e| PaystackAPIError::ApplePay(e.to_string()))?;
78
79 let parsed_response = serde_json::from_str(&response)
80 .map_err(|e| PaystackAPIError::ApplePay(e.to_string()))?;
81
82 Ok(parsed_response)
83 }
84
85 pub async fn unregister_domain(
93 &self,
94 domain_name: String,
95 ) -> PaystackResult<PhantomData<String>> {
96 let url = &self.base_url;
97 let body = json!({
98 "domainName": domain_name
99 });
100
101 let response = self
102 .http
103 .delete(url, &self.key, &body)
104 .await
105 .map_err(|e| PaystackAPIError::ApplePay(e.to_string()))?;
106
107 let parsed_response = serde_json::from_str(&response)
108 .map_err(|e| PaystackAPIError::ApplePay(e.to_string()))?;
109
110 Ok(parsed_response)
111 }
112}