use std::{error::Error, fmt::Display};
#[derive(Debug)]
pub enum DecodeError {
UnexpectedEof {
cursor: usize,
wanted: usize,
remaining: usize,
},
UnknownFileMagic,
StringTableHashMismatch,
StringTableSizeMismatch,
InvalidNameOffset,
UnknownValueType,
MalformedDecompressionNodes,
}
pub type DecodeResult<T> = Result<T, DecodeError>;
impl Error for DecodeError {}
impl Display for DecodeError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
DecodeError::UnexpectedEof {
cursor,
wanted,
remaining,
} => {
write!(
f,
"Unexpected end of file (cursor: {}, wanted: {}, remaining: {})",
cursor, wanted, remaining
)
}
DecodeError::UnknownFileMagic => f.write_str("Unexpected file magic bytes"),
DecodeError::StringTableHashMismatch => f.write_str("String table hash didn't match"),
DecodeError::StringTableSizeMismatch => f.write_str("String table size didn't match"),
DecodeError::InvalidNameOffset => f.write_str("Invalid name offset"),
DecodeError::UnknownValueType => f.write_str("Unknown value type"),
DecodeError::MalformedDecompressionNodes => {
f.write_str("Decompression nodes are malformed")
}
}
}
}