pub type Result<T> = core::result::Result<T, Error>;
#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("buffer too short: need {need}, have {have} ({what})")]
BufferTooShort {
need: usize,
have: usize,
what: &'static str,
},
#[error("invalid pack_start_code: {0:#010X} (expected 0x000001BA)")]
BadPackStartCode(u32),
#[error("invalid system_header_start_code: {0:#010X} (expected 0x000001BB)")]
BadSystemHeaderStartCode(u32),
#[error("invalid map_stream_id: {0:#04X} (expected 0xBC)")]
BadMapStreamId(u8),
#[error("PSM CRC_32 mismatch: computed {computed:#010X}, stored {stored:#010X}")]
BadCrc {
computed: u32,
stored: u32,
},
#[error("bad marker bit in {0}")]
BadMarker(&'static str),
#[error("bad SCR prefix: {0:#04b} (expected 0b01)")]
BadScrPrefix(u8),
#[error("bad stream_id_extension prefix byte: {0:#04X}")]
BadStreamIdExtensionPrefix(u8),
#[error("program_mux_rate is 0 (forbidden)")]
ZeroMuxRate,
#[error("pack_stuffing_length {0} exceeds maximum 7")]
StuffingLengthTooLarge(u8),
#[error("header_length {header_length} exceeds available bytes ({available})")]
HeaderLengthOverflow {
header_length: usize,
available: usize,
},
#[error("program_stream_map_length {map_length} exceeds available bytes ({available})")]
MapLengthOverflow {
map_length: usize,
available: usize,
},
#[error("PES parse error: {0}")]
Pes(#[from] mpeg_pes::Error),
}