distill-daemon 0.0.3

Daemon component of the asset pipeline `distill`.
Documentation
use std::{fmt, io, path::PathBuf, str};

#[derive(Debug)]
pub enum Error {
    Notify(notify::Error),
    IO(io::Error),
    RescanRequired,
    Lmdb(lmdb::Error),
    Capnp(capnp::Error),
    NotInSchema(capnp::NotInSchema),
    BincodeError(bincode::ErrorKind),
    RonError(ron::Error),
    ErasedSerde(erased_serde::Error),
    MetaDeError(PathBuf, ron::Error),
    SetLoggerError(log::SetLoggerError),
    UuidLength,
    RecvError,
    SendError,
    Exit,
    ImporterError(distill_importer::Error),
    StrUtf8Error(str::Utf8Error),
    Custom(String),
}

pub type Result<T> = std::result::Result<T, Error>;

impl std::error::Error for Error {
    fn cause(&self) -> Option<&dyn std::error::Error> {
        match *self {
            Error::Notify(ref e) => Some(e),
            Error::IO(ref e) => Some(e),
            Error::RescanRequired => None,
            Error::Lmdb(ref e) => Some(e),
            Error::Capnp(ref e) => Some(e),
            Error::NotInSchema(ref e) => Some(e),
            Error::BincodeError(ref e) => Some(e),
            Error::ErasedSerde(ref e) => Some(e),
            Error::RonError(ref e) => Some(e),
            Error::MetaDeError(_, ref e) => Some(e),
            Error::SetLoggerError(ref e) => Some(e),
            Error::UuidLength => None,
            Error::RecvError => None,
            Error::SendError => None,
            Error::Exit => None,
            Error::ImporterError(ref e) => Some(e),
            Error::StrUtf8Error(ref e) => Some(e),
            Error::Custom(ref _e) => None,
        }
    }
}
impl fmt::Display for Error {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match *self {
            Error::Notify(ref e) => e.fmt(f),
            Error::IO(ref e) => e.fmt(f),
            Error::RescanRequired => write!(f, "{}", self),
            Error::Lmdb(ref e) => e.fmt(f),
            Error::Capnp(ref e) => e.fmt(f),
            Error::NotInSchema(ref e) => e.fmt(f),
            Error::BincodeError(ref e) => e.fmt(f),
            Error::ErasedSerde(ref e) => e.fmt(f),
            Error::RonError(ref e) => e.fmt(f),
            Error::MetaDeError(ref path, ref e) => {
                write!(f, "metadata {} ", path.display())?;
                e.fmt(f)
            }
            Error::SetLoggerError(ref e) => e.fmt(f),
            Error::UuidLength => write!(f, "{}", self),
            Error::RecvError => write!(f, "{}", self),
            Error::SendError => write!(f, "{}", self),
            Error::Exit => write!(f, "{}", self),
            Error::ImporterError(ref e) => e.fmt(f),
            Error::StrUtf8Error(ref e) => e.fmt(f),
            Error::Custom(ref s) => f.write_str(s.as_str()),
        }
    }
}
impl From<notify::Error> for Error {
    fn from(err: notify::Error) -> Error {
        Error::Notify(err)
    }
}
impl From<io::Error> for Error {
    fn from(err: io::Error) -> Error {
        Error::IO(err)
    }
}
impl From<lmdb::Error> for Error {
    fn from(err: lmdb::Error) -> Error {
        Error::Lmdb(err)
    }
}
impl From<capnp::Error> for Error {
    fn from(err: capnp::Error) -> Error {
        Error::Capnp(err)
    }
}
impl From<capnp::NotInSchema> for Error {
    fn from(err: capnp::NotInSchema) -> Error {
        Error::NotInSchema(err)
    }
}
impl From<Box<bincode::ErrorKind>> for Error {
    fn from(err: Box<bincode::ErrorKind>) -> Error {
        Error::BincodeError(*err)
    }
}
impl From<ron::Error> for Error {
    fn from(err: ron::Error) -> Error {
        Error::RonError(err)
    }
}

impl From<erased_serde::Error> for Error {
    fn from(err: erased_serde::Error) -> Error {
        Error::ErasedSerde(err)
    }
}
impl From<Error> for capnp::Error {
    fn from(err: Error) -> capnp::Error {
        capnp::Error::failed(format!("{}", err))
    }
}
impl From<log::SetLoggerError> for Error {
    fn from(err: log::SetLoggerError) -> Error {
        Error::SetLoggerError(err)
    }
}
impl From<distill_importer::Error> for Error {
    fn from(err: distill_importer::Error) -> Error {
        Error::ImporterError(err)
    }
}
impl From<str::Utf8Error> for Error {
    fn from(err: str::Utf8Error) -> Error {
        Error::StrUtf8Error(err)
    }
}