1use core::fmt;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5#[non_exhaustive]
6pub enum Error {
7 OutOfBounds,
9 Truncated,
11 BadOffset,
13 InvalidUtf8,
15 Missing { field: &'static str },
17 DepthExceeded,
19 BudgetExceeded,
21 TooLarge,
23 BadMagic,
25 UnsupportedVersion(u8),
27 BadHeader,
29 Incomplete { needed: usize },
31 SchemaMismatch { expected: u64, found: u64 },
33 ChecksumMismatch,
35}
36
37impl fmt::Display for Error {
38 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
39 match self {
40 Error::OutOfBounds => f.write_str("out of bounds"),
41 Error::Truncated => f.write_str("field truncated by fixed_len"),
42 Error::BadOffset => f.write_str("pointer outside buffer"),
43 Error::InvalidUtf8 => f.write_str("invalid utf-8"),
44 Error::Missing { field } => write!(f, "required field `{field}` missing"),
45 Error::DepthExceeded => f.write_str("verify depth exceeded"),
46 Error::BudgetExceeded => f.write_str("verify budget exceeded"),
47 Error::TooLarge => f.write_str("message exceeds i32::MAX bytes"),
48 Error::BadMagic => f.write_str("bad magic"),
49 Error::UnsupportedVersion(v) => write!(f, "unsupported version {v}"),
50 Error::BadHeader => f.write_str("malformed header"),
51 Error::Incomplete { needed } => write!(f, "incomplete input: need at least {needed} bytes"),
52 Error::SchemaMismatch { expected, found } => {
53 write!(f, "schema mismatch: expected {expected:#x}, found {found:#x}")
54 }
55 Error::ChecksumMismatch => f.write_str("checksum mismatch"),
56 }
57 }
58}
59
60impl core::error::Error for Error {}