1pub type Result<T> = core::result::Result<T, Error>;
5
6#[derive(Debug, thiserror::Error, PartialEq, Eq)]
10pub enum Error {
11 #[error("buffer too short: need {need} bytes, have {have}")]
13 BufferTooShort {
14 need: usize,
16 have: usize,
18 },
19
20 #[error("invalid MODE: {mode} (must be 0 or 1 per EN 302 755 §5.1.7)")]
22 InvalidMode {
23 mode: u8,
25 },
26
27 #[error("unsupported TS/GS: 0x{ts_gs:02X}")]
29 UnsupportedTsGs {
30 ts_gs: u8,
32 },
33
34 #[error("serialize: output buffer too small — need {need}, have {have}")]
36 OutputBufferTooSmall {
37 need: usize,
39 have: usize,
41 },
42
43 #[error(
47 "DFL={dfl} bits exceeds maximum {max} bits (EN 302 307-1 §5.1.4 S2 normal frame; \
48 DVB-T2 tighter per EN 302 755 Table 2)"
49 )]
50 DflOutOfRange {
51 dfl: u16,
53 max: u16,
55 },
56}
57
58#[cfg(test)]
59mod tests {
60 use super::*;
61
62 #[test]
63 fn buffer_too_short_message_contains_values() {
64 let err = Error::BufferTooShort { need: 10, have: 5 };
65 let msg = format!("{err}");
66 assert!(msg.contains("10") && msg.contains("5"));
67 }
68
69 #[test]
70 fn invalid_mode_message_contains_clause_ref() {
71 let err = Error::InvalidMode { mode: 3 };
72 let msg = format!("{err}");
73 assert!(msg.contains("5.1.7"));
74 }
75}