dvb_si/descriptors/
decoder_config_flags.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize))]
9#[non_exhaustive]
10pub enum DecoderConfigFlags {
11 None,
13 InDescriptor,
15 SameService,
17 DsmccCarousel,
19 OtherService,
21 Reserved(u8),
23 Private,
25}
26
27impl DecoderConfigFlags {
28 #[must_use]
30 pub fn from_u8(v: u8) -> Self {
31 match v & 0x07 {
32 0 => Self::None,
33 1 => Self::InDescriptor,
34 2 => Self::SameService,
35 3 => Self::DsmccCarousel,
36 4 => Self::OtherService,
37 5 | 6 => Self::Reserved(v & 0x07),
38 _ => Self::Private,
39 }
40 }
41
42 #[must_use]
44 pub fn to_u8(self) -> u8 {
45 match self {
46 Self::None => 0,
47 Self::InDescriptor => 1,
48 Self::SameService => 2,
49 Self::DsmccCarousel => 3,
50 Self::OtherService => 4,
51 Self::Reserved(v) => v,
52 Self::Private => 7,
53 }
54 }
55
56 #[must_use]
58 pub fn name(self) -> &'static str {
59 match self {
60 Self::None => "none",
61 Self::InDescriptor => "in descriptor",
62 Self::SameService => "same service",
63 Self::DsmccCarousel => "DSM-CC carousel",
64 Self::OtherService => "other service",
65 Self::Reserved(_) => "reserved",
66 Self::Private => "private",
67 }
68 }
69}
70dvb_common::impl_spec_display!(DecoderConfigFlags, Reserved);
71
72#[cfg(test)]
73mod tests {
74 use super::*;
75
76 #[test]
77 fn round_trip_values() {
78 for v in 0u8..=7 {
79 let cf = DecoderConfigFlags::from_u8(v);
80 assert_eq!(cf.to_u8(), v & 0x07, "value {v} round-trip mismatch");
81 }
82 }
83}