posemesh_domain_http/
errors.rs

1use futures::channel::{mpsc::SendError, oneshot::Canceled};
2use reqwest::StatusCode;
3use std::error::Error as StdError;
4
5#[derive(Debug, thiserror::Error)]
6pub enum AuthError {
7    #[error("Invalid credentials: {0}")]
8    Unauthorized(&'static str),
9    #[error("Parse JWT token: base64 decode error: {0}")]
10    Base64DecodeError(#[from] base64::DecodeError),
11    #[error("JSON parse error: {0}")]
12    JsonParseError(#[from] serde_json::Error),
13}
14
15#[derive(Debug, Clone)]
16pub struct AukiErrorResponse {
17    pub status: StatusCode,
18    pub error: String,
19}
20
21impl std::fmt::Display for AukiErrorResponse {
22    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23        write!(f, "Auki response - status: {}, error: {}", self.status, self.error)
24    }
25}
26
27impl std::error::Error for AukiErrorResponse {}
28
29#[derive(Debug, thiserror::Error)]
30pub enum DomainError {
31    #[error("Reqwest error: {0}")]
32    ReqwestError(#[from] reqwest::Error),
33    #[error("{0}")]
34    AukiErrorResponse(#[from] AukiErrorResponse),
35    #[error("Invalid content-type header")]
36    InvalidContentTypeHeader,
37    #[error("Stream error: {0}")]
38    StreamError(#[from] SendError),
39    #[error("Stream cancelled: {0}")]
40    StreamCancelled(#[from] Canceled),
41    #[error("Auth error: {0}")]
42    AuthError(#[from] AuthError),
43    #[error("Invalid request: {0}")]
44    InvalidRequest(&'static str),
45    #[error("{0}")]
46    Other(#[from] Box<dyn StdError + Send + Sync>),
47}