1use serde::{Deserialize, Serialize};
2use std::fmt::Display;
3
4#[derive(thiserror::Error, Debug)]
6pub enum ZebedeeError {
7 #[error("{0}")]
9 InvalidRequest(#[from] reqwest::Error),
10 #[error("Unable to parse json: {0}")]
12 InvalidJson(#[from] serde_json::Error),
13 #[error("{0}")]
15 Validate(#[from] validator::ValidationErrors),
16 #[error("{0}")]
18 Api(ApiError),
19 #[error("{0}")]
21 Msg(ErrorMsg),
22}
23
24#[derive(Debug, Serialize, Deserialize, Default)]
26#[serde(default)]
27pub struct ApiError {
28 pub message: Option<String>,
30 pub success: bool,
32}
33
34#[derive(thiserror::Error, Debug)]
36pub enum ErrorMsg {
37 #[error("Bad Gamertag Payment format {0}")]
39 BadGamerTagFormat(String),
40 #[error("Bad payload data {0}")]
42 BadPayloadData(String),
43 #[error("Bad LN Address {0}, ValidationError {1}")]
45 BadLnAddress(String, String),
46}
47
48impl From<ErrorMsg> for ZebedeeError {
49 fn from(value: ErrorMsg) -> Self {
50 ZebedeeError::Msg(value)
51 }
52}
53
54impl From<ApiError> for ZebedeeError {
55 fn from(value: ApiError) -> Self {
56 ZebedeeError::Api(value)
57 }
58}
59
60impl Display for ApiError {
61 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
62 match &self.message {
63 Some(s) => f.write_str(s.as_str()),
64 None => f.write_str("No Message Returned"),
65 }
66 }
67}