1use bytes::Bytes;
2use nutype_enum::nutype_enum;
3
4nutype_enum! {
5 pub enum AacPacketType(u8) {
11 SequenceHeader = 0x0,
13 Raw = 0x1,
15 }
16}
17
18#[derive(Debug, Clone, PartialEq)]
23pub enum AacPacket {
24 SequenceHeader(Bytes),
26 Raw(Bytes),
28 Unknown { aac_packet_type: AacPacketType, data: Bytes },
30}
31
32impl AacPacket {
33 pub fn new(aac_packet_type: AacPacketType, data: Bytes) -> Self {
35 match aac_packet_type {
36 AacPacketType::Raw => AacPacket::Raw(data),
37 AacPacketType::SequenceHeader => AacPacket::SequenceHeader(data),
38 _ => AacPacket::Unknown { aac_packet_type, data },
39 }
40 }
41}
42
43#[cfg(test)]
44#[cfg_attr(all(test, coverage_nightly), coverage(off))]
45mod tests {
46 use super::*;
47
48 #[test]
49 fn test_new() {
50 let cases = [
51 (
52 AacPacketType::Raw,
53 Bytes::from(vec![0, 1, 2, 3]),
54 AacPacket::Raw(Bytes::from(vec![0, 1, 2, 3])),
55 ),
56 (
57 AacPacketType::SequenceHeader,
58 Bytes::from(vec![0, 1, 2, 3]),
59 AacPacket::SequenceHeader(Bytes::from(vec![0, 1, 2, 3])),
60 ),
61 (
62 AacPacketType(0x0),
63 Bytes::from(vec![0, 1, 2, 3]),
64 AacPacket::SequenceHeader(Bytes::from(vec![0, 1, 2, 3])),
65 ),
66 (
67 AacPacketType(0x1),
68 Bytes::from(vec![0, 1, 2, 3]),
69 AacPacket::Raw(Bytes::from(vec![0, 1, 2, 3])),
70 ),
71 (
72 AacPacketType(0x2),
73 Bytes::from(vec![0, 1, 2, 3]),
74 AacPacket::Unknown {
75 aac_packet_type: AacPacketType(0x2),
76 data: Bytes::from(vec![0, 1, 2, 3]),
77 },
78 ),
79 (
80 AacPacketType(0x3),
81 Bytes::from(vec![0, 1, 2, 3]),
82 AacPacket::Unknown {
83 aac_packet_type: AacPacketType(0x3),
84 data: Bytes::from(vec![0, 1, 2, 3]),
85 },
86 ),
87 ];
88
89 for (packet_type, data, expected) in cases {
90 let packet = AacPacket::new(packet_type, data.clone());
91 assert_eq!(packet, expected);
92 }
93 }
94
95 #[test]
96 fn test_aac_packet_type() {
97 assert_eq!(
98 format!("{:?}", AacPacketType::SequenceHeader),
99 "AacPacketType::SequenceHeader"
100 );
101 assert_eq!(format!("{:?}", AacPacketType::Raw), "AacPacketType::Raw");
102 assert_eq!(format!("{:?}", AacPacketType(0x2)), "AacPacketType(2)");
103 assert_eq!(format!("{:?}", AacPacketType(0x3)), "AacPacketType(3)");
104
105 assert_eq!(AacPacketType(0x01), AacPacketType::Raw);
106 assert_eq!(AacPacketType(0x00), AacPacketType::SequenceHeader);
107 }
108}