Skip to main content

alpaca_http/
error.rs

1use thiserror::Error;
2
3use crate::meta::ErrorMeta;
4
5#[derive(Debug, Error)]
6pub enum Error {
7    #[error("invalid request: {0}")]
8    InvalidRequest(String),
9    #[error("authentication error: {0}")]
10    Authentication(String),
11    #[error("concurrency limit error: {0}")]
12    ConcurrencyLimit(String),
13    #[error("transport error: {message}")]
14    Transport {
15        message: String,
16        meta: Option<ErrorMeta>,
17    },
18    #[error("deserialize error: {message}")]
19    Deserialize {
20        message: String,
21        meta: Option<ErrorMeta>,
22    },
23    #[error("http status error")]
24    HttpStatus(ErrorMeta),
25    #[error("rate limited")]
26    RateLimited(ErrorMeta),
27}
28
29impl Error {
30    #[must_use]
31    pub fn meta(&self) -> Option<&ErrorMeta> {
32        match self {
33            Self::Transport { meta, .. } | Self::Deserialize { meta, .. } => meta.as_ref(),
34            Self::HttpStatus(meta) | Self::RateLimited(meta) => Some(meta),
35            Self::InvalidRequest(_) | Self::Authentication(_) | Self::ConcurrencyLimit(_) => None,
36        }
37    }
38
39    #[must_use]
40    pub fn from_reqwest(error: reqwest::Error, meta: Option<ErrorMeta>) -> Self {
41        Self::Transport {
42            message: error.to_string(),
43            meta,
44        }
45    }
46}