Skip to main content

syslog_too/
errors.rs

1//! Definitions and trait implementations for crate errors.
2
3#[derive(Debug)]
4pub enum Error {
5    Initialization(Box<dyn std::error::Error + Send + Sync>),
6    Write(::std::io::Error),
7    Io(::std::io::Error),
8}
9
10pub type Result<T> = std::result::Result<T, Error>;
11
12impl std::error::Error for Error {
13    fn cause(&self) -> Option<&dyn std::error::Error> {
14        match *self {
15            Error::Initialization(ref err) => Some(&**err),
16            Error::Write(_) => None,
17            Error::Io(ref err) => Some(err),
18        }
19    }
20}
21
22impl std::fmt::Display for Error {
23    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
24        match *self {
25            Error::Initialization(ref err) => write!(f, "Initialization error: {}", err),
26            Error::Write(ref err) => write!(f, "Write error: {}", err),
27            Error::Io(ref err) => write!(f, "Io error: {}", err),
28        }
29    }
30}
31
32impl From<std::io::Error> for Error {
33    fn from(err: std::io::Error) -> Error {
34        Error::Io(err)
35    }
36}
37
38#[test]
39fn error_is_send_sync() {
40    fn is_send_sync<T: Send + Sync>() {}
41    is_send_sync::<Error>();
42}