1use crate::{
5 ApplePayEndpoints, CustomersEndpoints, DedicatedVirtualAccountEndpoints, HttpClient,
6 SubaccountEndpoints, TerminalEndpoints, TransactionEndpoints, TransactionSplitEndpoints,
7 VirtualTerminalEndpoints,
8};
9use std::sync::Arc;
10
11pub struct PaystackClient<T: HttpClient + Default> {
14 pub transactions: TransactionEndpoints<T>,
16 pub transaction_split: TransactionSplitEndpoints<T>,
18 pub subaccount: SubaccountEndpoints<T>,
20 pub terminal: TerminalEndpoints<T>,
22 pub virutal_terminal: VirtualTerminalEndpoints<T>,
24 pub customers: CustomersEndpoints<T>,
26 pub dedicated_virtual_account: DedicatedVirtualAccountEndpoints<T>,
28 pub apple_pay: ApplePayEndpoints<T>,
30}
31
32impl<T: HttpClient + Default> PaystackClient<T> {
33 pub fn new(api_key: String) -> PaystackClient<T> {
34 let http = Arc::new(T::default());
35 let key = Arc::new(api_key);
36 PaystackClient {
37 transactions: TransactionEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
38 transaction_split: TransactionSplitEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
39 subaccount: SubaccountEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
40 terminal: TerminalEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
41 virutal_terminal: VirtualTerminalEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
42 customers: CustomersEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
43 dedicated_virtual_account: DedicatedVirtualAccountEndpoints::new(
44 Arc::clone(&key),
45 Arc::clone(&http),
46 ),
47 apple_pay: ApplePayEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
48 }
49 }
50}