1#[derive(Debug, thiserror::Error)]
3#[non_exhaustive]
4pub enum Error {
5 #[error("I/O error: {0}")]
7 Io(#[from] std::io::Error),
8
9 #[error("format error: {0}")]
11 Core(#[from] hurray_core::Error),
12
13 #[error("unexpected end of stream")]
15 UnexpectedEof,
16
17 #[error("invalid frame header: {0}")]
19 InvalidHeader(String),
20
21 #[error("buffer count mismatch: descriptor declares {declared}, got {actual}")]
23 MultiBufferLengthMismatch { declared: usize, actual: usize },
24
25 #[error("buffer[{index}] size mismatch: declared {declared}, got {actual}")]
27 BufferSizeMismatch {
28 index: usize,
29 declared: u64,
30 actual: u64,
31 },
32
33 #[error("frame too large: {kind} = {value}, limit = {limit}")]
35 FrameTooLarge {
36 kind: &'static str,
37 value: u64,
38 limit: u64,
39 },
40
41 #[error(
43 "buffer[{index}] sync_mode 0x{actual:02X} is invalid for cross-machine transport \
44 (must be 0x00 ProducerSynced)"
45 )]
46 InvalidCrossMachineSyncMode { index: usize, actual: u8 },
47
48 #[error("torn composite: head declares {declared} member(s), stream ended after {actual}")]
51 TornComposite { declared: u32, actual: u32 },
52
53 #[error("composite nesting too deep: exceeded limit of {limit}")]
56 CompositeNestingTooDeep { limit: usize },
57
58 #[error("tensor {0:?} is not a composite head")]
60 NotAComposite(String),
61
62 #[error("invalid file magic: expected HRRYFILE")]
65 InvalidFileMagic,
66
67 #[error("invalid trailer magic")]
69 InvalidTrailerMagic,
70
71 #[error("unsupported container version {major}.x (reader supports 1.x)")]
73 UnsupportedContainerVersion { major: u8 },
74
75 #[error("tensor not found: {0:?}")]
77 TensorNotFound(String),
78
79 #[error("duplicate tensor name: {0:?}")]
81 DuplicateTensorName(String),
82
83 #[error("tensor name must not be empty")]
85 TensorNameEmpty,
86
87 #[error("tensor name too long: {len} bytes (max 65535)")]
89 TensorNameTooLong { len: usize },
90
91 #[error("index CRC-32C mismatch: stored 0x{stored:08X}, computed 0x{computed:08X}")]
93 IndexCrc32cMismatch { stored: u32, computed: u32 },
94
95 #[error("duplicate KV key: {0:?}")]
97 DuplicateKvKey(String),
98
99 #[error("KV key must not be empty")]
101 KvKeyEmpty,
102
103 #[error("KV key too long: {len} bytes (max 65535)")]
105 KvKeyTooLong { len: usize },
106
107 #[error("file header has reserved flag bits set: 0x{flags:08X}")]
109 ReservedFileFlagBits { flags: u32 },
110
111 #[error("index section overruns trailer boundary")]
113 IndexOverrunsTrailer,
114}
115
116pub type Result<T> = std::result::Result<T, Error>;