use super::super::statistics::StatisticsHeader;
use nom::{number::complete::be_u32, IResult};
pub fn parse_nb_format_header(input: &[u8]) -> IResult<&[u8], StatisticsHeader> {
let (input, version_type) = be_u32(input)?;
let (input, statistics_kind) = be_u32(input)?;
let (input, _reserved1) = be_u32(input)?;
let (input, data_length) = be_u32(input)?;
let (input, metadata1) = be_u32(input)?;
let (input, metadata2) = be_u32(input)?;
let (input, metadata3) = be_u32(input)?;
let (input, checksum_or_more) = be_u32(input)?;
Ok((
input,
StatisticsHeader {
version: version_type,
statistics_kind,
data_length,
metadata1,
metadata2,
metadata3,
checksum: checksum_or_more,
table_id: None,
},
))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_nb_format_header_parsing() {
let test_data = vec![
0x00, 0x00, 0x00, 0x04, 0x26, 0x29, 0x1b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x14, 0xd4, ];
let result = parse_nb_format_header(&test_data);
assert!(result.is_ok());
let (_, header) = result.unwrap();
assert_eq!(header.version, 4);
assert_eq!(header.statistics_kind, 0x2629_1b05);
assert_eq!(header.data_length, 44);
assert_eq!(header.metadata1, 1);
assert_eq!(header.metadata2, 101);
assert_eq!(header.metadata3, 2);
assert_eq!(header.checksum, 0x14d4);
}
}