1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum SegbError {
8 #[error("I/O error: {0}")]
10 Io(#[from] std::io::Error),
11
12 #[error("invalid SEGB magic: expected 53455342 (\"SEGB\"), got {found}")]
14 BadMagic { found: String },
15
16 #[error("truncated header: need {need} bytes, got {got}")]
18 TruncatedHeader { need: usize, got: usize },
19
20 #[error("truncated record header at offset {offset}: need {need} bytes, got {got}")]
22 TruncatedRecordHeader {
23 offset: u64,
24 need: usize,
25 got: usize,
26 },
27
28 #[error("truncated record payload at offset {offset}: need {need} bytes, got {got}")]
30 TruncatedPayload {
31 offset: u64,
32 need: usize,
33 got: usize,
34 },
35
36 #[error("invalid record length {length} at offset {offset}")]
38 InvalidLength { offset: u64, length: i32 },
39
40 #[error("invalid SEGB v2 entry count {count}")]
42 InvalidEntryCount { count: i32 },
43
44 #[error(
46 "SEGB v2 trailer ({trailer_bytes} bytes) exceeds stream length ({stream_bytes} bytes)"
47 )]
48 TrailerOverflow {
49 trailer_bytes: u64,
50 stream_bytes: u64,
51 },
52
53 #[error("unknown entry state value {0}")]
55 UnknownState(i32),
56
57 #[error("invalid seek offset: {0}")]
59 InvalidSeek(String),
60
61 #[error("malformed protobuf varint at byte offset {offset}")]
63 MalformedVarint { offset: usize },
64
65 #[error("protobuf length-delimited field at offset {offset} claims {length} bytes but only {remaining} remain")]
67 ProtobufOverflow {
68 offset: usize,
69 length: usize,
70 remaining: usize,
71 },
72}
73
74pub type Result<T> = std::result::Result<T, SegbError>;