dvb_si/descriptors/
metadata_format.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize))]
8#[non_exhaustive]
9pub enum MetadataFormat {
10 Reserved0(u8),
12 TeM,
14 BiM,
16 Reserved1(u8),
18 AppFormat,
20 Private(u8),
22 Identifier,
24}
25
26impl MetadataFormat {
27 #[must_use]
29 pub fn from_u8(v: u8) -> Self {
30 match v {
31 0x00..=0x0F => Self::Reserved0(v),
32 0x10 => Self::TeM,
33 0x11 => Self::BiM,
34 0x12..=0x3E => Self::Reserved1(v),
35 0x3F => Self::AppFormat,
36 0x40..=0xFE => Self::Private(v),
37 0xFF => Self::Identifier,
38 }
39 }
40
41 #[must_use]
43 pub fn to_u8(self) -> u8 {
44 match self {
45 Self::Reserved0(v) => v,
46 Self::TeM => 0x10,
47 Self::BiM => 0x11,
48 Self::Reserved1(v) => v,
49 Self::AppFormat => 0x3F,
50 Self::Private(v) => v,
51 Self::Identifier => 0xFF,
52 }
53 }
54
55 #[must_use]
57 pub fn name(self) -> &'static str {
58 match self {
59 Self::Reserved0(_) => "reserved",
60 Self::TeM => "TeM",
61 Self::BiM => "BiM",
62 Self::Reserved1(_) => "reserved",
63 Self::AppFormat => "app format",
64 Self::Private(_) => "private",
65 Self::Identifier => "identifier",
66 }
67 }
68}
69dvb_common::impl_spec_display!(MetadataFormat, Reserved0, Reserved1, Private);
70
71#[cfg(test)]
72mod tests {
73 use super::*;
74
75 #[test]
76 fn round_trip_values() {
77 let values = [0x00u8, 0x05, 0x10, 0x11, 0x20, 0x3F, 0x80, 0xFE, 0xFF];
78 for v in values {
79 let mf = MetadataFormat::from_u8(v);
80 assert_eq!(mf.to_u8(), v, "value 0x{v:02X} round-trip mismatch");
81 }
82 }
83}