1use std::fmt;
2
3#[derive(Debug)]
5pub enum Error {
6 InvalidMagic,
8 UnsupportedVersion(u8),
10 TruncatedPacket(String),
12 DecompressionFailed(String),
14 ChecksumMismatch { expected: u32, actual: u32 },
16 InvalidUtf8(std::string::FromUtf8Error),
18}
19
20impl fmt::Display for Error {
21 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22 match self {
23 Error::InvalidMagic => write!(f, "Invalid .hpack magic bytes"),
24 Error::UnsupportedVersion(v) => write!(f, "Unsupported .hpack version: {}", v),
25 Error::TruncatedPacket(msg) => write!(f, "Truncated packet: {}", msg),
26 Error::DecompressionFailed(msg) => write!(f, "Decompression failed: {}", msg),
27 Error::ChecksumMismatch { expected, actual } => {
28 write!(
29 f,
30 "CRC32 mismatch: expected 0x{:08X}, got 0x{:08X}",
31 expected, actual
32 )
33 }
34 Error::InvalidUtf8(e) => write!(f, "Invalid UTF-8 in decompressed HTML: {}", e),
35 }
36 }
37}
38
39impl std::error::Error for Error {}