hydrus_api/
error.rs

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}