use std::{io::ErrorKind, num::NonZero};
use symphonia_core::io::{MediaSourceStream, ReadBytes as _};
#[derive(Clone, Copy, PartialEq, Eq)]
pub(crate) enum Endianness {
Big,
Little,
}
impl Endianness {
pub(crate) fn u32(self, mss: &mut MediaSourceStream<'_>) -> std::io::Result<u32> {
match self {
Self::Big => mss.read_be_u32(),
Self::Little => mss.read_u32(),
}
}
pub(crate) fn non_zero_u32(
self,
mss: &mut MediaSourceStream<'_>,
) -> std::io::Result<NonZero<u32>> {
let number = match self {
Self::Big => mss.read_be_u32()?,
Self::Little => mss.read_u32()?,
};
NonZero::new(number)
.ok_or_else(|| std::io::Error::new(ErrorKind::InvalidData, "value cannot be zero"))
}
pub(crate) fn u16(self, mss: &mut MediaSourceStream<'_>) -> std::io::Result<u16> {
match self {
Self::Big => mss.read_be_u16(),
Self::Little => mss.read_u16(),
}
}
pub(crate) fn non_zero_u16(
self,
mss: &mut MediaSourceStream<'_>,
) -> std::io::Result<NonZero<u16>> {
let number = match self {
Self::Big => mss.read_be_u16()?,
Self::Little => mss.read_u16()?,
};
NonZero::new(number)
.ok_or_else(|| std::io::Error::new(ErrorKind::InvalidData, "value cannot be zero"))
}
}