netpix_common/mpegts/descriptors/
private_data_indicator_descriptor.rs1use 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}