pub type Result<T> = core::result::Result<T, Error>;
#[derive(Debug, thiserror::Error, PartialEq, Eq)]
pub enum Error {
#[error("buffer too short: need {need} bytes, have {have}")]
BufferTooShort {
need: usize,
have: usize,
},
#[error("invalid MODE: {mode} (must be 0 or 1 per EN 302 755 §5.1.7)")]
InvalidMode {
mode: u8,
},
#[error("unsupported TS/GS: 0x{ts_gs:02X}")]
UnsupportedTsGs {
ts_gs: u8,
},
#[error("serialize: output buffer too small — need {need}, have {have}")]
OutputBufferTooSmall {
need: usize,
have: usize,
},
#[error(
"DFL={dfl} bits exceeds maximum {max} bits (EN 302 307-1 §5.1.4 S2 normal frame; \
DVB-T2 tighter per EN 302 755 Table 2)"
)]
DflOutOfRange {
dfl: u16,
max: u16,
},
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn buffer_too_short_message_contains_values() {
let err = Error::BufferTooShort { need: 10, have: 5 };
let msg = format!("{err}");
assert!(msg.contains("10") && msg.contains("5"));
}
#[test]
fn invalid_mode_message_contains_clause_ref() {
let err = Error::InvalidMode { mode: 3 };
let msg = format!("{err}");
assert!(msg.contains("5.1.7"));
}
}