silkroad 0.0.1

A full-featured registry server for Cargo.
use failure::Fail;
use rustls;

/// Error for SilkRoad
#[derive(Fail, Debug)]
pub enum SkrdError {
    /// IO error
    #[fail(display = "IO error: {}", _0)]
    Io(#[cause] std::io::Error),

    /// TLS error
    #[fail(display = "TLS error: {}", _0)]
    Tls(#[cause] rustls::TLSError),

    /// Log error
    #[fail(display = "Log error: {}", _0)]
    Log(#[cause] log::SetLoggerError),

    /// Toml error
    #[fail(display = "Toml error: {}", _0)]
    Toml(toml::de::Error),

    /// Json error
    #[fail(display = "Toml error: {}", _0)]
    Json(serde_json::Error),

    /// Git error
    #[fail(display = "Serde error: {}", _0)]
    Git(git2::Error),

    /// Custom error
    #[fail(display = "Custom error: {}", _0)]
    Custom(String),
}

impl From<std::io::Error> for SkrdError {
    fn from(err: std::io::Error) -> SkrdError {
        SkrdError::Io(err)
    }
}

impl From<rustls::TLSError> for SkrdError {
    fn from(err: rustls::TLSError) -> SkrdError {
        SkrdError::Tls(err)
    }
}

impl From<log::SetLoggerError> for SkrdError {
    fn from(err: log::SetLoggerError) -> SkrdError {
        SkrdError::Log(err)
    }
}

impl std::convert::From<toml::de::Error> for SkrdError {
    fn from(err: toml::de::Error) -> SkrdError {
        SkrdError::Toml(err)
    }
}

impl std::convert::From<git2::Error> for SkrdError {
    fn from(err: git2::Error) -> Self {
        SkrdError::Git(err)
    }
}

impl std::convert::From<serde_json::Error> for SkrdError {
    fn from(err: serde_json::Error) -> Self {
        SkrdError::Json(err)
    }
}

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