rust_fetch/
error.rs

1use thiserror::Error;
2
3use crate::network_error::NetworkError;
4
5pub type FetchResult<T> = Result<T, FetchError>;
6
7/// Represents an error that occurs when attempting to deserialize a response body into type T
8#[derive(Error, Debug)]
9pub enum DeserializationError {
10    #[error(transparent)]
11    Json(serde_json::Error),
12    #[error(transparent)]
13    Xml(serde_xml_rs::Error),
14    #[error(transparent)]
15    UrlEncoded(serde_urlencoded::de::Error),
16    #[error("{0}")]
17    Unknown(String),
18}
19
20/// Represents an error that occurs when attempting to serialize a request body into type T
21#[derive(Error, Debug)]
22pub enum SerializationError {
23    #[error(transparent)]
24    Json(serde_json::Error),
25    #[error(transparent)]
26    Xml(serde_xml_rs::Error),
27    #[error(transparent)]
28    UrlEncoded(serde_urlencoded::ser::Error),
29    #[error("{0}")]
30    Unknown(String),
31}
32
33#[derive(Error, Debug)]
34pub enum FetchError {
35    #[error(transparent)]
36    Unknown(anyhow::Error),
37    #[error("Unable to parse header: {0} => {1}")]
38    HeaderParseError(String, String),
39    #[error("{0} is not a valid Url")]
40    InvalidUrl(String),
41    #[error("Request failed. StatusCode: {:?}", err.status())]
42    UnableToSendRequest { err: reqwest::Error },
43    #[error(transparent)]
44    NetworkError(NetworkError),
45    #[error(transparent)]
46    SerializationError(SerializationError),
47    #[error(transparent)]
48    DeserializationError(DeserializationError),
49}