paystack-client 0.1.2

A simple Rust client for Paystack payments (initialize & verify).
Documentation
use reqwest::{Client, Error};
use uuid::Uuid;


pub mod models;
use models::{PaymentInitializeResponse, PaymentInitializePayload, PaymentVerifyResponse};

const PAYSTACK_BASE_URL: &str = "https://api.paystack.co";


pub struct PaystackClient{
    client : Client,
    secret_key : String
}


impl PaystackClient{
    pub fn new<S : Into<String>> (secret_key : S) -> Self {
        Self {
            client : Client::new(),
            secret_key : secret_key.into()
        }

    }

    pub fn generate_refrence(&self) -> String {
        Uuid::new_v4().to_string()
    }

    pub async  fn  initialize_payment(
        &self, 
        email: &str, 
        amount: f64, 
        callback_url: &str) -> Result<(String, PaymentInitializeResponse), Error>{

            let reference: String = self.generate_refrence();

            let payload = PaymentInitializePayload {
                email: email.to_string(),
                amount: (amount * 100.0) as i64,
                reference: reference.clone(),
                callback_url: callback_url.to_string(),
            };

            let res = self
                    .client
                    .post(format!("{}/transaction/initialize", PAYSTACK_BASE_URL))
                    .bearer_auth(&self.secret_key)
                    .json(&payload)
                    .send()
                    .await?
                    .json::<PaymentInitializeResponse>()
                    .await?;

            Ok((reference, res))

    }


    pub async  fn verify_payment(&self, reference:&str) -> Result<PaymentVerifyResponse, Error> {
        let res = self
            .client
            .get(format!("{}/transaction/verify/{}", PAYSTACK_BASE_URL, reference))
            .bearer_auth(&self.secret_key)
            .send()
            .await?
            .json::<PaymentVerifyResponse>()
            .await?;

        Ok(res)

    }



}