implement display trait for archive error and err code

This commit is contained in:
Jamie Winsor
2016-01-09 16:14:19 -08:00
parent 98168ddcf1
commit fe0b023a2d
+31 -3
View File
@@ -1,3 +1,5 @@
use std::error;
use std::fmt;
use archive;
pub type ArchiveResult<T> = Result<T, ArchiveError>;
@@ -5,13 +7,39 @@ pub type ArchiveResult<T> = Result<T, ArchiveError>;
#[derive(Debug)]
pub struct ErrCode(i32);
impl fmt::Display for ErrCode {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
write!(fmt, "{}", self.0)
}
}
#[derive(Debug)]
pub enum ArchiveError {
Consumed,
Sys(ErrCode, String),
ReadFailure,
WriteFailure,
HeaderPosition,
Sys(ErrCode, String),
}
impl error::Error for ArchiveError {
fn description(&self) -> &str {
match self {
&ArchiveError::Consumed => "Builder already consumed",
&ArchiveError::HeaderPosition => "Header position expected to be 0",
&ArchiveError::Sys(_, _) => "libarchive system error",
}
}
}
impl fmt::Display for ArchiveError {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
match self {
&ArchiveError::Consumed => write!(fmt, "Builder already consumed"),
&ArchiveError::HeaderPosition => write!(fmt, "Header position expected to be 0"),
&ArchiveError::Sys(ref code, ref msg) => {
write!(fmt, "{} (libarchive err_code={})", msg, code)
}
}
}
}
impl<'a> From<&'a archive::Handle> for ArchiveError {