capsule-lib 1.0.0

Rust library for reading and writing Capsule container files
Documentation
// SPDX-FileCopyrightText: 2026 Alexander R. Croft
// SPDX-License-Identifier: GPL-3.0-or-later

use thiserror::Error;

pub type CapsuleResult<T> = Result<T, CapsuleError>;

#[derive(Debug, Error)]
pub enum CapsuleError {
    #[error("file too short: expected at least 24 bytes, got {0}")]
    FileTooShort(usize),

    #[error("invalid magic")]
    InvalidMagic,

    #[error("invalid version field")]
    InvalidVersionField,

    #[error("reserved version 0000 is not allowed")]
    ReservedVersion,

    #[error("invalid encoding field")]
    InvalidEncodingField,

    #[error("invalid header length field")]
    InvalidHeaderLengthField,

    #[error("invalid body CRC field")]
    InvalidBodyCrcField,

    #[error("declared header length {declared} exceeds available bytes {available}")]
    HeaderLengthExceedsAvailable { declared: usize, available: usize },

    #[error("CRC mismatch: declared {declared:08X} computed {computed:08X}")]
    CrcMismatch { declared: u32, computed: u32 },

    #[error("non-ASCII byte found in {which} at offset {offset}")]
    NonAsciiByte { which: &'static str, offset: usize },

    #[error("invalid base64 in {which}: {message}")]
    InvalidBase64 { which: &'static str, message: String },

    #[error("invalid CBOR in {which}: {message}")]
    InvalidCbor { which: &'static str, message: String },

    #[error("invalid ASCII header: {0}")]
    InvalidAsciiHeader(String),
}