use data_encoding::DecodeError;
use derp;
use hyper;
use json;
use std::io;
use std::path::Path;
use tempfile;
use metadata::Role;
#[derive(Debug, PartialEq, Eq)]
pub enum Error {
BadSignature,
Encoding(String),
ExpiredMetadata(Role),
IllegalArgument(String),
MissingMetadata(Role),
NoSupportedHashAlgorithm,
NotFound,
Opaque(String),
Programming(String),
TargetUnavailable,
VerificationFailure(String),
}
impl From<json::error::Error> for Error {
fn from(err: json::error::Error) -> Error {
Error::Encoding(format!("JSON: {:?}", err))
}
}
impl Error {
pub fn from_io(err: io::Error, path: &Path) -> Error {
Error::Opaque(format!("Path {:?} : {:?}", path, err))
}
}
impl From<io::Error> for Error {
fn from(err: io::Error) -> Error {
Error::Opaque(format!("IO: {:?}", err))
}
}
impl From<hyper::error::Error> for Error {
fn from(err: hyper::error::Error) -> Error {
Error::Opaque(format!("Hyper: {:?}", err))
}
}
impl From<hyper::error::ParseError> for Error {
fn from(err: hyper::error::ParseError) -> Error {
Error::Opaque(format!("Hyper: {:?}", err))
}
}
impl From<DecodeError> for Error {
fn from(err: DecodeError) -> Error {
Error::Encoding(format!("{:?}", err))
}
}
impl From<derp::Error> for Error {
fn from(err: derp::Error) -> Error {
Error::Encoding(format!("DER: {:?}", err))
}
}
impl From<tempfile::PersistError> for Error {
fn from(err: tempfile::PersistError) -> Error {
Error::Opaque(format!("Error persisting temp file: {:?}", err))
}
}