use crate::{
ApplePayEndpoints, CustomersEndpoints, DedicatedVirtualAccountEndpoints, HttpClient,
PlansEndpoints, SubaccountEndpoints, TerminalEndpoints, TransactionEndpoints,
TransactionSplitEndpoints, VirtualTerminalEndpoints,
};
use std::sync::Arc;
pub struct PaystackClient<T: HttpClient + Default> {
pub transactions: TransactionEndpoints<T>,
pub transaction_split: TransactionSplitEndpoints<T>,
pub subaccount: SubaccountEndpoints<T>,
pub terminal: TerminalEndpoints<T>,
pub virutal_terminal: VirtualTerminalEndpoints<T>,
pub customers: CustomersEndpoints<T>,
pub dedicated_virtual_account: DedicatedVirtualAccountEndpoints<T>,
pub apple_pay: ApplePayEndpoints<T>,
pub plans: PlansEndpoints<T>,
}
impl<T: HttpClient + Default> PaystackClient<T> {
pub fn new(api_key: String) -> PaystackClient<T> {
let http = Arc::new(T::default());
let key = Arc::new(api_key);
PaystackClient {
transactions: TransactionEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
transaction_split: TransactionSplitEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
subaccount: SubaccountEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
terminal: TerminalEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
virutal_terminal: VirtualTerminalEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
customers: CustomersEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
dedicated_virtual_account: DedicatedVirtualAccountEndpoints::new(
Arc::clone(&key),
Arc::clone(&http),
),
apple_pay: ApplePayEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
plans: PlansEndpoints::new(Arc::clone(&key), Arc::clone(&http)),
}
}
}