Skip to main content

ironsbe_core/
error.rs

1//! Error types for IronSBE core operations.
2
3use thiserror::Error;
4
5/// Core error type for IronSBE operations.
6#[derive(Debug, Error)]
7pub enum Error {
8    /// Buffer is too short for the requested operation.
9    #[error("buffer too short: required {required} bytes, available {available} bytes")]
10    BufferTooShort {
11        /// Required buffer size in bytes.
12        required: usize,
13        /// Available buffer size in bytes.
14        available: usize,
15    },
16
17    /// Template ID mismatch during decoding.
18    #[error("template mismatch: expected {expected}, actual {actual}")]
19    TemplateMismatch {
20        /// Expected template ID.
21        expected: u16,
22        /// Actual template ID found.
23        actual: u16,
24    },
25
26    /// Schema ID mismatch during decoding.
27    #[error("schema mismatch: expected {expected}, actual {actual}")]
28    SchemaMismatch {
29        /// Expected schema ID.
30        expected: u16,
31        /// Actual schema ID found.
32        actual: u16,
33    },
34
35    /// Invalid enum value encountered.
36    #[error("invalid enum value: tag {tag}, value {value}")]
37    InvalidEnumValue {
38        /// Field tag/ID.
39        tag: u16,
40        /// Invalid value encountered.
41        value: u64,
42    },
43
44    /// Invalid UTF-8 encoding in string field.
45    #[error("invalid UTF-8 at offset {offset}")]
46    InvalidUtf8 {
47        /// Byte offset where invalid UTF-8 was found.
48        offset: usize,
49    },
50
51    /// Offset out of bounds.
52    #[error("offset {offset} out of bounds for buffer of size {size}")]
53    OffsetOutOfBounds {
54        /// Requested offset.
55        offset: usize,
56        /// Buffer size in bytes.
57        size: usize,
58    },
59
60    /// Group iteration error.
61    #[error("group iteration error: {message}")]
62    GroupError {
63        /// Error message.
64        message: String,
65    },
66
67    /// Version incompatibility.
68    #[error(
69        "version incompatible: message version {message_version}, min supported {min_supported}"
70    )]
71    VersionIncompatible {
72        /// Message version.
73        message_version: u16,
74        /// Minimum supported version.
75        min_supported: u16,
76    },
77}
78
79/// Result type alias for IronSBE core operations.
80pub type Result<T> = std::result::Result<T, Error>;