Line data Source code
1 : use bytes::{Buf, BytesMut};
2 : use hex_literal::hex;
3 : use serde::Deserialize;
4 : use std::io::Read;
5 : use utils::bin_ser::LeSer;
6 :
7 6 : #[derive(Debug, PartialEq, Eq, Deserialize)]
8 : pub struct HeaderData {
9 : magic: u16,
10 : info: u16,
11 : tli: u32,
12 : pageaddr: u64,
13 : len: u32,
14 : }
15 :
16 : // A manual implementation using BytesMut, just so we can
17 : // verify that we decode the same way.
18 6 : pub fn decode_header_data(buf: &mut BytesMut) -> HeaderData {
19 6 : HeaderData {
20 6 : magic: buf.get_u16_le(),
21 6 : info: buf.get_u16_le(),
22 6 : tli: buf.get_u32_le(),
23 6 : pageaddr: buf.get_u64_le(),
24 6 : len: buf.get_u32_le(),
25 6 : }
26 6 : }
27 :
28 6 : pub fn decode2<R: Read>(reader: &mut R) -> HeaderData {
29 6 : HeaderData::des_from(reader).unwrap()
30 6 : }
31 :
32 : #[test]
33 6 : fn test1() {
34 6 : let raw1 = hex!("8940 7890 5534 7890 1289 5379 8378 7893 4207 8923 4712 3218");
35 6 : let mut buf1 = BytesMut::from(&raw1[..]);
36 6 : let mut buf2 = &raw1[..];
37 6 : let dec1 = decode_header_data(&mut buf1);
38 6 : let dec2 = decode2(&mut buf2);
39 6 : assert_eq!(dec1, dec2);
40 6 : assert_eq!(buf1, buf2);
41 6 : }
|