use std::fmt;
#[derive(Debug)]
pub enum Error {
InvalidMagic,
UnsupportedVersion(u8),
TruncatedPacket(String),
DecompressionFailed(String),
ChecksumMismatch { expected: u32, actual: u32 },
InvalidUtf8(std::string::FromUtf8Error),
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::InvalidMagic => write!(f, "Invalid .hpack magic bytes"),
Error::UnsupportedVersion(v) => write!(f, "Unsupported .hpack version: {}", v),
Error::TruncatedPacket(msg) => write!(f, "Truncated packet: {}", msg),
Error::DecompressionFailed(msg) => write!(f, "Decompression failed: {}", msg),
Error::ChecksumMismatch { expected, actual } => {
write!(
f,
"CRC32 mismatch: expected 0x{:08X}, got 0x{:08X}",
expected, actual
)
}
Error::InvalidUtf8(e) => write!(f, "Invalid UTF-8 in decompressed HTML: {}", e),
}
}
}
impl std::error::Error for Error {}