1use crate::api_core::common::FileIdentifier;
2use std::error::Error as StdError;
3use std::fmt;
4
5pub type Result<T> = std::result::Result<T, Error>;
6
7#[derive(Debug)]
8pub enum Error {
9 Reqwest(reqwest::Error),
10 Hydrus(String),
11 InvalidServiceType(String),
12 ImportVetoed(String),
13 ImportFailed(String),
14 FileNotFound(FileIdentifier),
15 InvalidMime(String),
16 BuildError(String),
17 Serialization(String),
18 Deserialization(String),
19}
20
21impl fmt::Display for Error {
22 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23 match self {
24 Self::Reqwest(e) => e.fmt(f),
25 Self::Hydrus(msg) => msg.fmt(f),
26 Self::InvalidServiceType(service_type) => {
27 write!(f, "Invalid Service Type '{}'", service_type)
28 }
29 Self::ImportFailed(msg) => write!(f, "File import failed: {msg}"),
30 Self::ImportVetoed(msg) => write!(f, "File import vetoed: {msg}"),
31 Self::FileNotFound(id) => write!(f, "File {:?} not found", id),
32 Self::InvalidMime(mime) => write!(f, "Failed to parse invalid mime {mime}"),
33 Self::BuildError(error) => write!(f, "Build error {error}"),
34 Self::Serialization(msg) => write!(f, "Failed to serialize request {msg}"),
35 Self::Deserialization(msg) => write!(f, "Failed to deserialize request {msg}"),
36 }
37 }
38}
39
40impl StdError for Error {
41 fn source(&self) -> Option<&(dyn StdError + 'static)> {
42 match self {
43 Self::Reqwest(e) => e.source(),
44 _ => None,
45 }
46 }
47}
48
49impl From<reqwest::Error> for Error {
50 fn from(e: reqwest::Error) -> Self {
51 Self::Reqwest(e)
52 }
53}