1use thiserror::Error;
5
6pub type CapsuleResult<T> = Result<T, CapsuleError>;
7
8#[derive(Debug, Error)]
9pub enum CapsuleError {
10 #[error("file too short: expected at least 24 bytes, got {0}")]
11 FileTooShort(usize),
12
13 #[error("invalid magic")]
14 InvalidMagic,
15
16 #[error("invalid version field")]
17 InvalidVersionField,
18
19 #[error("reserved version 0000 is not allowed")]
20 ReservedVersion,
21
22 #[error("invalid encoding field")]
23 InvalidEncodingField,
24
25 #[error("invalid header length field")]
26 InvalidHeaderLengthField,
27
28 #[error("invalid body CRC field")]
29 InvalidBodyCrcField,
30
31 #[error("declared header length {declared} exceeds available bytes {available}")]
32 HeaderLengthExceedsAvailable { declared: usize, available: usize },
33
34 #[error("CRC mismatch: declared {declared:08X} computed {computed:08X}")]
35 CrcMismatch { declared: u32, computed: u32 },
36
37 #[error("non-ASCII byte found in {which} at offset {offset}")]
38 NonAsciiByte { which: &'static str, offset: usize },
39
40 #[error("invalid base64 in {which}: {message}")]
41 InvalidBase64 { which: &'static str, message: String },
42
43 #[error("invalid CBOR in {which}: {message}")]
44 InvalidCbor { which: &'static str, message: String },
45
46 #[error("invalid ASCII header: {0}")]
47 InvalidAsciiHeader(String),
48}