use thiserror::Error;
#[derive(Error, Debug)]
pub enum SbfError {
#[error("Invalid sync bytes")]
InvalidSync,
#[error("CRC mismatch: expected {expected:#06x}, got {actual:#06x}")]
CrcMismatch { expected: u16, actual: u16 },
#[error("Incomplete block: need {needed} bytes, have {have}")]
IncompleteBlock { needed: usize, have: usize },
#[error("Invalid block length: {0}")]
InvalidLength(u16),
#[error("Unknown block ID: {0}")]
UnknownBlockId(u16),
#[error("Parse error: {0}")]
ParseError(String),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("End of stream")]
EndOfStream,
}
pub type SbfResult<T> = Result<T, SbfError>;