use bytes::Bytes;
use nutype_enum::nutype_enum;
nutype_enum! {
pub enum AacPacketType(u8) {
SequenceHeader = 0,
Raw = 1,
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum AacAudioData {
SequenceHeader(Bytes),
Raw(Bytes),
Unknown {
aac_packet_type: AacPacketType,
data: Bytes,
},
}
impl AacAudioData {
pub fn new(aac_packet_type: AacPacketType, data: Bytes) -> Self {
match aac_packet_type {
AacPacketType::Raw => AacAudioData::Raw(data),
AacPacketType::SequenceHeader => AacAudioData::SequenceHeader(data),
_ => AacAudioData::Unknown { aac_packet_type, data },
}
}
}
#[cfg(test)]
#[cfg_attr(all(test, coverage_nightly), coverage(off))]
mod tests {
use super::*;
#[test]
fn test_new() {
let cases = [
(
AacPacketType::Raw,
Bytes::from(vec![0, 1, 2, 3]),
AacAudioData::Raw(Bytes::from(vec![0, 1, 2, 3])),
),
(
AacPacketType::SequenceHeader,
Bytes::from(vec![0, 1, 2, 3]),
AacAudioData::SequenceHeader(Bytes::from(vec![0, 1, 2, 3])),
),
(
AacPacketType(0x0),
Bytes::from(vec![0, 1, 2, 3]),
AacAudioData::SequenceHeader(Bytes::from(vec![0, 1, 2, 3])),
),
(
AacPacketType(0x1),
Bytes::from(vec![0, 1, 2, 3]),
AacAudioData::Raw(Bytes::from(vec![0, 1, 2, 3])),
),
(
AacPacketType(0x2),
Bytes::from(vec![0, 1, 2, 3]),
AacAudioData::Unknown {
aac_packet_type: AacPacketType(0x2),
data: Bytes::from(vec![0, 1, 2, 3]),
},
),
(
AacPacketType(0x3),
Bytes::from(vec![0, 1, 2, 3]),
AacAudioData::Unknown {
aac_packet_type: AacPacketType(0x3),
data: Bytes::from(vec![0, 1, 2, 3]),
},
),
];
for (packet_type, data, expected) in cases {
let packet = AacAudioData::new(packet_type, data.clone());
assert_eq!(packet, expected);
}
}
#[test]
fn test_aac_packet_type() {
assert_eq!(
format!("{:?}", AacPacketType::SequenceHeader),
"AacPacketType::SequenceHeader"
);
assert_eq!(format!("{:?}", AacPacketType::Raw), "AacPacketType::Raw");
assert_eq!(format!("{:?}", AacPacketType(0x2)), "AacPacketType(2)");
assert_eq!(format!("{:?}", AacPacketType(0x3)), "AacPacketType(3)");
assert_eq!(AacPacketType(0x01), AacPacketType::Raw);
assert_eq!(AacPacketType(0x00), AacPacketType::SequenceHeader);
}
}