use core::fmt;
pub type Result<T> = core::result::Result<T, FoldError>;
#[derive(Debug)]
pub enum FoldError {
NotFound,
NotDirectory,
IsDirectory,
InvalidPath(&'static str),
Corrupt(&'static str),
Unsupported(&'static str),
FileTooLarge { size: u64, max: u64 },
Decompress(&'static str),
VerifyFailed(&'static str),
Io(&'static str),
}
impl FoldError {
pub fn as_token(&self) -> &'static str {
match self {
FoldError::NotFound => "not_found",
FoldError::NotDirectory => "not_directory",
FoldError::IsDirectory => "is_directory",
FoldError::InvalidPath(_) => "invalid_path",
FoldError::Corrupt(_) => "corrupt",
FoldError::Unsupported(_) => "unsupported",
FoldError::FileTooLarge { .. } => "file_too_large",
FoldError::Decompress(_) => "decompress",
FoldError::VerifyFailed(_) => "verify_failed",
FoldError::Io(_) => "io",
}
}
}
impl fmt::Display for FoldError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
FoldError::NotFound => f.write_str("not found"),
FoldError::NotDirectory => f.write_str("not a directory"),
FoldError::IsDirectory => f.write_str("is a directory"),
FoldError::InvalidPath(w) => write!(f, "invalid path: {w}"),
FoldError::Corrupt(w) => write!(f, "corrupt: {w}"),
FoldError::Unsupported(w) => write!(f, "unsupported: {w}"),
FoldError::FileTooLarge { size, max } => {
write!(f, "file too large: {size} bytes exceeds cap {max}")
}
FoldError::Decompress(w) => write!(f, "decompress: {w}"),
FoldError::VerifyFailed(w) => write!(f, "verify failed: {w}"),
FoldError::Io(w) => write!(f, "io: {w}"),
}
}
}
impl core::error::Error for FoldError {}