1use thiserror::Error;
2
3use crate::network_error::NetworkError;
4
5pub type FetchResult<T> = Result<T, FetchError>;
6
7#[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#[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}