distill_daemon/
error.rs

1use std::{fmt, io, path::PathBuf, str};
2
3#[derive(Debug)]
4pub enum Error {
5    Notify(notify::Error),
6    IO(io::Error),
7    RescanRequired,
8    Lmdb(lmdb::Error),
9    Capnp(capnp::Error),
10    NotInSchema(capnp::NotInSchema),
11    BincodeError(bincode::ErrorKind),
12    RonError(ron::Error),
13    ErasedSerde(erased_serde::Error),
14    MetaDeError(PathBuf, ron::Error),
15    SetLoggerError(log::SetLoggerError),
16    UuidLength,
17    RecvError,
18    SendError,
19    Exit,
20    ImporterError(distill_importer::Error),
21    StrUtf8Error(str::Utf8Error),
22    Custom(String),
23}
24
25pub type Result<T> = std::result::Result<T, Error>;
26
27impl std::error::Error for Error {
28    fn cause(&self) -> Option<&dyn std::error::Error> {
29        match *self {
30            Error::Notify(ref e) => Some(e),
31            Error::IO(ref e) => Some(e),
32            Error::RescanRequired => None,
33            Error::Lmdb(ref e) => Some(e),
34            Error::Capnp(ref e) => Some(e),
35            Error::NotInSchema(ref e) => Some(e),
36            Error::BincodeError(ref e) => Some(e),
37            Error::ErasedSerde(ref e) => Some(e),
38            Error::RonError(ref e) => Some(e),
39            Error::MetaDeError(_, ref e) => Some(e),
40            Error::SetLoggerError(ref e) => Some(e),
41            Error::UuidLength => None,
42            Error::RecvError => None,
43            Error::SendError => None,
44            Error::Exit => None,
45            Error::ImporterError(ref e) => Some(e),
46            Error::StrUtf8Error(ref e) => Some(e),
47            Error::Custom(ref _e) => None,
48        }
49    }
50}
51impl fmt::Display for Error {
52    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
53        match *self {
54            Error::Notify(ref e) => e.fmt(f),
55            Error::IO(ref e) => e.fmt(f),
56            Error::RescanRequired => write!(f, "{}", self),
57            Error::Lmdb(ref e) => e.fmt(f),
58            Error::Capnp(ref e) => e.fmt(f),
59            Error::NotInSchema(ref e) => e.fmt(f),
60            Error::BincodeError(ref e) => e.fmt(f),
61            Error::ErasedSerde(ref e) => e.fmt(f),
62            Error::RonError(ref e) => e.fmt(f),
63            Error::MetaDeError(ref path, ref e) => {
64                write!(f, "metadata {} ", path.display())?;
65                e.fmt(f)
66            }
67            Error::SetLoggerError(ref e) => e.fmt(f),
68            Error::UuidLength => write!(f, "{}", self),
69            Error::RecvError => write!(f, "{}", self),
70            Error::SendError => write!(f, "{}", self),
71            Error::Exit => write!(f, "{}", self),
72            Error::ImporterError(ref e) => e.fmt(f),
73            Error::StrUtf8Error(ref e) => e.fmt(f),
74            Error::Custom(ref s) => f.write_str(s.as_str()),
75        }
76    }
77}
78impl From<notify::Error> for Error {
79    fn from(err: notify::Error) -> Error {
80        Error::Notify(err)
81    }
82}
83impl From<io::Error> for Error {
84    fn from(err: io::Error) -> Error {
85        Error::IO(err)
86    }
87}
88impl From<lmdb::Error> for Error {
89    fn from(err: lmdb::Error) -> Error {
90        Error::Lmdb(err)
91    }
92}
93impl From<capnp::Error> for Error {
94    fn from(err: capnp::Error) -> Error {
95        Error::Capnp(err)
96    }
97}
98impl From<capnp::NotInSchema> for Error {
99    fn from(err: capnp::NotInSchema) -> Error {
100        Error::NotInSchema(err)
101    }
102}
103impl From<Box<bincode::ErrorKind>> for Error {
104    fn from(err: Box<bincode::ErrorKind>) -> Error {
105        Error::BincodeError(*err)
106    }
107}
108impl From<ron::Error> for Error {
109    fn from(err: ron::Error) -> Error {
110        Error::RonError(err)
111    }
112}
113
114impl From<erased_serde::Error> for Error {
115    fn from(err: erased_serde::Error) -> Error {
116        Error::ErasedSerde(err)
117    }
118}
119impl From<Error> for capnp::Error {
120    fn from(err: Error) -> capnp::Error {
121        capnp::Error::failed(format!("{}", err))
122    }
123}
124impl From<log::SetLoggerError> for Error {
125    fn from(err: log::SetLoggerError) -> Error {
126        Error::SetLoggerError(err)
127    }
128}
129impl From<distill_importer::Error> for Error {
130    fn from(err: distill_importer::Error) -> Error {
131        Error::ImporterError(err)
132    }
133}
134impl From<str::Utf8Error> for Error {
135    fn from(err: str::Utf8Error) -> Error {
136        Error::StrUtf8Error(err)
137    }
138}