use std::error::Error; use std::fmt::Display; use std::io; pub type ArchiveResult = Result>; #[derive(Debug)] pub enum ArchiveError { IO(io::Error), Driver { name: &'static str, error: E }, } impl From for ArchiveError { fn from(value: io::Error) -> Self { Self::IO(value) } } impl Display for ArchiveError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { ArchiveError::IO(error) => write!(f, "{error}"), ArchiveError::Driver { name, error } => write!(f, "{name}: {error}"), } } } impl Error for ArchiveError { fn source(&self) -> Option<&(dyn Error + 'static)> { match self { Self::IO(error) => Some(error), _ => None, } } }