use thiserror::Error;
#[derive(Debug, Error)]
pub enum SegbError {
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("invalid SEGB magic: expected 53455342 (\"SEGB\"), got {found}")]
BadMagic { found: String },
#[error("truncated header: need {need} bytes, got {got}")]
TruncatedHeader { need: usize, got: usize },
#[error("truncated record header at offset {offset}: need {need} bytes, got {got}")]
TruncatedRecordHeader {
offset: u64,
need: usize,
got: usize,
},
#[error("truncated record payload at offset {offset}: need {need} bytes, got {got}")]
TruncatedPayload {
offset: u64,
need: usize,
got: usize,
},
#[error("invalid record length {length} at offset {offset}")]
InvalidLength { offset: u64, length: i32 },
#[error("invalid SEGB v2 entry count {count}")]
InvalidEntryCount { count: i32 },
#[error(
"SEGB v2 trailer ({trailer_bytes} bytes) exceeds stream length ({stream_bytes} bytes)"
)]
TrailerOverflow {
trailer_bytes: u64,
stream_bytes: u64,
},
#[error("unknown entry state value {0}")]
UnknownState(i32),
#[error("invalid seek offset: {0}")]
InvalidSeek(String),
#[error("malformed protobuf varint at byte offset {offset}")]
MalformedVarint { offset: usize },
#[error("protobuf length-delimited field at offset {offset} claims {length} bytes but only {remaining} remain")]
ProtobufOverflow {
offset: usize,
length: usize,
remaining: usize,
},
}
pub type Result<T> = std::result::Result<T, SegbError>;