use std::{error, fmt, io, result};
#[derive(Debug)]
pub enum Error {
Io(io::Error),
Exists,
UniqueId,
InvalidId(String),
InvalidBlockSize(u32),
}
impl fmt::Display for Error {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
match self {
Error::Io(cause) => fmt::Display::fmt(cause, fmt),
Error::Exists => write!(fmt, "The container already exists"),
Error::UniqueId => write!(fmt, "could not generate a unique id"),
Error::InvalidId(id) => write!(fmt, "The id '{}' is invalid", id),
Error::InvalidBlockSize(n) => write!(fmt, "The block-size is invalid: {}", n),
}
}
}
impl error::Error for Error {
fn source(&self) -> Option<&(dyn error::Error + 'static)> {
match self {
Error::Io(cause) => Some(cause),
Error::Exists | Error::UniqueId | Error::InvalidId(_) | Error::InvalidBlockSize(_) => {
None
}
}
}
}
impl From<io::Error> for Error {
fn from(cause: io::Error) -> Self {
Error::Io(cause)
}
}
pub type Result<T> = result::Result<T, Error>;