1use crate::{
5 HttpClient, SubaccountEndpoints, TerminalEndpoints, TransactionEndpoints,
6 TransactionSplitEndpoints, VirtualTerminalEndpoints,
7};
8use std::sync::Arc;
9
10pub struct PaystackClient<T: HttpClient + Default> {
13 pub transaction: TransactionEndpoints<T>,
15 pub transaction_split: TransactionSplitEndpoints<T>,
17 pub subaccount: SubaccountEndpoints<T>,
19 pub terminal: TerminalEndpoints<T>,
21 pub virutal_terminal: VirtualTerminalEndpoints<T>,
23}
24
25impl<T: HttpClient + Default> PaystackClient<T> {
26 pub fn new(api_key: String) -> PaystackClient<T> {
27 let http = Arc::new(T::default());
28 let key = Arc::new(api_key);
29 PaystackClient {
30 transaction: TransactionEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
31 transaction_split: TransactionSplitEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
32 subaccount: SubaccountEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
33 terminal: TerminalEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
34 virutal_terminal: VirtualTerminalEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
35 }
36 }
37}