Skip to main content

capsule_lib/
error.rs

1// SPDX-FileCopyrightText: 2026 Alexander R. Croft
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4use 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}