netpix_common/mpegts/descriptors/
private_data_indicator_descriptor.rs

1use crate::implement_descriptor;
2use crate::mpegts::descriptors::{DescriptorHeader, ParsableDescriptor};
3use crate::utils::bits::BitReader;
4use bincode::{Decode, Encode};
5
6implement_descriptor! {
7    pub struct PrivateDataIndicatorDescriptor {
8        pub private_data_indicator: u32
9    }
10    unmarshall_impl: |header, data| {
11        if data.len() < 4 {
12            return None;
13        }
14
15        let reader = BitReader::new(data);
16        let private_data_indicator = reader.get_bits_u32(0)?;
17
18        Some(PrivateDataIndicatorDescriptor {
19            header,
20            private_data_indicator,
21        })
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28    use crate::mpegts::descriptors::tags::DescriptorTag;
29    use crate::mpegts::descriptors::DescriptorHeader;
30
31    #[test]
32    fn test_private_data_indicator_descriptor_unmarshall() {
33        let data = vec![0x01, 0x02, 0x03, 0x04];
34        let header = DescriptorHeader {
35            descriptor_tag: DescriptorTag::from(0x0F),
36            descriptor_length: data.len() as u8,
37        };
38        let descriptor = PrivateDataIndicatorDescriptor {
39            header: header.clone(),
40            private_data_indicator: u32::from_be_bytes([0x01, 0x02, 0x03, 0x04]),
41        };
42
43        assert_eq!(
44            PrivateDataIndicatorDescriptor::unmarshall(header, &data),
45            Some(descriptor)
46        );
47    }
48
49    #[test]
50    fn test_should_display_audio_stream_descriptor() {
51        let header = DescriptorHeader {
52            descriptor_tag: DescriptorTag::from(0x0F),
53            descriptor_length: 4,
54        };
55        let descriptor = PrivateDataIndicatorDescriptor {
56            header: header.clone(),
57            private_data_indicator: u32::from_be_bytes([0x01, 0x02, 0x03, 0x04]),
58        };
59
60        assert_eq!(
61            format!("{}", descriptor),
62            "Private Data Indicator Descriptor\nPrivate Data Indicator: 16909060\n"
63        );
64    }
65}