use std::fmt::Display;
use reqwest::StatusCode;
#[derive(thiserror::Error, Debug)]
pub enum PaystackError {
#[error("Generic error: {0}")]
Generic(String),
#[error("Transaction Creation Error: {0}")]
TransactionCreation(String),
#[error("Charge Creation Error: {0}")]
ChargeCreation(String),
#[error("Request failed: `{0}`")]
RequestNotSuccessful(#[from] RequestNotSuccessful),
#[error("Response parsing error: {0}")]
ResponseParsing(String),
#[error(transparent)]
Reqwest(#[from] reqwest::Error),
}
#[derive(Debug)]
pub struct RequestNotSuccessful {
pub status: StatusCode,
pub body: String,
}
impl RequestNotSuccessful {
pub fn new(status: StatusCode, body: String) -> Self {
Self { status, body }
}
}
impl std::error::Error for RequestNotSuccessful {}
impl Display for RequestNotSuccessful {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "StatusCode: {}, Body: {}", self.status, self.body)
}
}