use serde::{Deserialize, Serialize};
use std::fmt::Display;
#[derive(thiserror::Error, Debug)]
pub enum ZebedeeError {
#[error("{0}")]
InvalidRequest(#[from] reqwest::Error),
#[error("Unable to parse json: {0}")]
InvalidJson(#[from] serde_json::Error),
#[error("{0}")]
Validate(#[from] validator::ValidationErrors),
#[error("{0}")]
Api(ApiError),
#[error("{0}")]
Msg(ErrorMsg),
}
#[derive(Debug, Serialize, Deserialize, Default)]
#[serde(default)]
pub struct ApiError {
pub message: Option<String>,
pub success: bool,
}
#[derive(thiserror::Error, Debug)]
pub enum ErrorMsg {
#[error("Bad Gamertag Payment format {0}")]
BadGamerTagFormat(String),
#[error("Bad payload data {0}")]
BadPayloadData(String),
#[error("Bad LN Address {0}, ValidationError {1}")]
BadLnAddress(String, String),
}
impl From<ErrorMsg> for ZebedeeError {
fn from(value: ErrorMsg) -> Self {
ZebedeeError::Msg(value)
}
}
impl From<ApiError> for ZebedeeError {
fn from(value: ApiError) -> Self {
ZebedeeError::Api(value)
}
}
impl Display for ApiError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match &self.message {
Some(s) => f.write_str(s.as_str()),
None => f.write_str("No Message Returned"),
}
}
}