use std::error::Error as StdError;
use std::fmt;
use std::io::Error as IoError;
#[derive(Debug)]
pub enum Error {
InvalidVersion,
MissingDebianBinary,
MissingControlFile,
MissingPackageName,
MissingPackageVersion,
InvalidControlFile,
MissingControlArchive,
MissingDataArchive,
ControlAlreadyRead,
DataAlreadyRead,
UnknownEntryFormat,
Io(IoError),
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
Error::InvalidVersion => write!(f, "Contents of debian_binary is not 2.x"),
Error::MissingDebianBinary => write!(f, "Missing debian_binary file"),
Error::MissingControlFile => write!(f, "control archive is missing control file"),
Error::MissingPackageName => write!(f, "control file did not contain a package name"),
Error::MissingPackageVersion => {
write!(f, "control file did not contain a package version")
}
Error::InvalidControlFile => write!(f, "control file missed formatted"),
Error::MissingControlArchive => write!(f, "control archive is missing"),
Error::MissingDataArchive => write!(f, "data archive is missing"),
Error::ControlAlreadyRead => write!(f, "control archive has been past"),
Error::DataAlreadyRead => write!(f, "data archive has been past"),
Error::UnknownEntryFormat => {
write!(f, "entry in debian package has unknown file format")
}
Error::Io(ref err) => write!(f, "{}", err),
}
}
}
impl StdError for Error {
fn source(&self) -> Option<&(dyn StdError + 'static)> {
match *self {
Error::Io(ref err) => Some(err),
_ => None,
}
}
}
impl From<IoError> for Error {
fn from(err: IoError) -> Error {
Error::Io(err)
}
}