use broadcast_common::bits::BitError;
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 packet_start_code_prefix: {0:#08X} (expected 0x000001)")]
BadStartCode(u32),
#[error("invalid stream_id: {0:#04X} (expected 0xBD private_stream_1)")]
BadStreamId(u8),
#[error("bad fixed/marker bits in {0}")]
BadFixedBits(&'static str),
#[error("invalid PTS_DTS_flags: {0:#04b} (expected 0b10, PTS only)")]
BadPtsDtsFlags(u8),
#[error("invalid PES_header_data_length: {0:#04X} (expected 0x05)")]
BadHeaderDataLength(u8),
#[error("invalid anc_data_descriptor tag: {0:#04X} (expected 0xC4)")]
BadDescriptorTag(u8),
#[error("PES_packet_length {len} exceeds available bytes ({available})")]
PesLengthOverflow {
len: usize,
available: usize,
},
#[error("PES_packet_length {0} exceeds the 16-bit field maximum (65535)")]
PesLengthTooLarge(usize),
#[error("field {what} value {value} does not fit in {bits} bits")]
FieldTooWide {
what: &'static str,
value: u32,
bits: u32,
},
#[error("inconsistent user_data_words length: have {have}, need {need} (data_count & 0xFF)")]
InconsistentUdwLength {
have: usize,
need: usize,
},
#[error("reserved field {what} was not zero: {value:#X}")]
ReservedNotZero {
what: &'static str,
value: u64,
},
#[error("ANC RTP payload Length mismatch: header declares {declared}, computed {computed}")]
LengthMismatch {
declared: usize,
computed: usize,
},
#[error("bit stream error: {0}")]
Bits(BitError),
#[cfg(feature = "rtp")]
#[error("RTP header error: {0}")]
Rtp(rtp_packet::Error),
}
impl From<BitError> for Error {
fn from(e: BitError) -> Self {
Error::Bits(e)
}
}