paystack/
client.rs

1//! Client
2//! =========
3//! This file contains the Paystack API client, and it associated endpoints.
4use crate::{
5    HttpClient, SubaccountEndpoints, TerminalEndpoints, TransactionEndpoints,
6    TransactionSplitEndpoints, VirtualTerminalEndpoints,
7};
8use std::sync::Arc;
9
10/// This is the entry level struct for the paystack API.
11/// it allows for authentication of the client
12pub struct PaystackClient<T: HttpClient + Default> {
13    /// Transaction API route
14    pub transaction: TransactionEndpoints<T>,
15    /// Transaction Split API route
16    pub transaction_split: TransactionSplitEndpoints<T>,
17    /// Subaccount API route
18    pub subaccount: SubaccountEndpoints<T>,
19    /// Terminal API route
20    pub terminal: TerminalEndpoints<T>,
21    /// Virutal Terminal API route
22    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}