zebedee_rust/
errors.rs

1use serde::{Deserialize, Serialize};
2use std::fmt::Display;
3
4/// Zebedee Error
5#[derive(thiserror::Error, Debug)]
6pub enum ZebedeeError {
7    /// Error from reqwest crate which is used to make HTTP requests
8    #[error("{0}")]
9    InvalidRequest(#[from] reqwest::Error),
10    /// Serde json Errors when parsing
11    #[error("Unable to parse json: {0}")]
12    InvalidJson(#[from] serde_json::Error),
13    /// Serde json Errors when parsing
14    #[error("{0}")]
15    Validate(#[from] validator::ValidationErrors),
16    /// Error messages from Zebedee REST API
17    #[error("{0}")]
18    Api(ApiError),
19    /// Internal Error messages
20    #[error("{0}")]
21    Msg(ErrorMsg),
22}
23
24/// Zebedee Rest API error message
25#[derive(Debug, Serialize, Deserialize, Default)]
26#[serde(default)]
27pub struct ApiError {
28    /// Error message
29    pub message: Option<String>,
30    /// Status of API call
31    pub success: bool,
32}
33
34/// General Error messages
35#[derive(thiserror::Error, Debug)]
36pub enum ErrorMsg {
37    /// Bad Gamertag Payment format
38    #[error("Bad Gamertag Payment format {0}")]
39    BadGamerTagFormat(String),
40    /// Bad payload data
41    #[error("Bad payload data {0}")]
42    BadPayloadData(String),
43    /// Bad LN Address
44    #[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}