#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
#[non_exhaustive]
pub enum EmsgVersion {
SegmentRelative,
RepresentationRelative,
}
pub const VERSION_0: u8 = 0;
pub const VERSION_1: u8 = 1;
impl EmsgVersion {
pub fn from_u8(v: u8) -> Option<Self> {
match v {
VERSION_0 => Some(EmsgVersion::SegmentRelative),
VERSION_1 => Some(EmsgVersion::RepresentationRelative),
_ => None,
}
}
pub fn to_u8(self) -> u8 {
match self {
EmsgVersion::SegmentRelative => VERSION_0,
EmsgVersion::RepresentationRelative => VERSION_1,
}
}
pub fn name(&self) -> &'static str {
match self {
EmsgVersion::SegmentRelative => "segment relative (v0)",
EmsgVersion::RepresentationRelative => "representation relative (v1)",
}
}
}
dvb_common::impl_spec_display!(EmsgVersion);
#[cfg(test)]
mod tests {
use super::*;
use alloc::string::ToString;
#[test]
fn round_trips() {
assert_eq!(EmsgVersion::from_u8(0), Some(EmsgVersion::SegmentRelative));
assert_eq!(
EmsgVersion::from_u8(1),
Some(EmsgVersion::RepresentationRelative)
);
assert_eq!(EmsgVersion::from_u8(2), None);
assert_eq!(EmsgVersion::SegmentRelative.to_u8(), 0);
assert_eq!(EmsgVersion::RepresentationRelative.to_u8(), 1);
}
#[test]
fn display_uses_name() {
assert_eq!(
EmsgVersion::SegmentRelative.to_string(),
"segment relative (v0)"
);
}
}