use crate::{ErrorKind, Result};
use std::fmt::Debug;
use trackable::track_assert;
#[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct StreamId(u8);
impl Debug for StreamId {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "StreamId(0X{:02X})", self.0)
}
}
impl StreamId {
pub const AUDIO_MIN: u8 = 0xC0;
pub const AUDIO_MAX: u8 = 0xDF;
pub const VIDEO_MIN: u8 = 0xE0;
pub const VIDEO_MAX: u8 = 0xEF;
pub fn new(id: u8) -> Self {
StreamId(id)
}
pub fn new_audio(id: u8) -> Result<Self> {
track_assert!(
(Self::AUDIO_MIN..=Self::AUDIO_MAX).contains(&id),
ErrorKind::InvalidInput,
"Not an audio ID: {}",
id
);
Ok(StreamId(id))
}
pub fn new_video(id: u8) -> Result<Self> {
track_assert!(
(Self::VIDEO_MIN..=Self::VIDEO_MAX).contains(&id),
ErrorKind::InvalidInput,
"Not a video ID: {}",
id
);
Ok(StreamId(id))
}
pub fn as_u8(&self) -> u8 {
self.0
}
pub fn is_audio(&self) -> bool {
0xC0 <= self.0 && self.0 <= 0xDF
}
pub fn is_video(&self) -> bool {
0xE0 <= self.0 && self.0 <= 0xEF
}
}