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 2 : #[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 2 : pub fn decode_header_data(buf: &mut BytesMut) -> HeaderData {
19 2 : HeaderData {
20 2 : magic: buf.get_u16_le(),
21 2 : info: buf.get_u16_le(),
22 2 : tli: buf.get_u32_le(),
23 2 : pageaddr: buf.get_u64_le(),
24 2 : len: buf.get_u32_le(),
25 2 : }
26 2 : }
27 :
28 2 : pub fn decode2<R: Read>(reader: &mut R) -> HeaderData {
29 2 : HeaderData::des_from(reader).unwrap()
30 2 : }
31 :
32 2 : #[test]
33 2 : fn test1() {
34 2 : let raw1 = hex!("8940 7890 5534 7890 1289 5379 8378 7893 4207 8923 4712 3218");
35 2 : let mut buf1 = BytesMut::from(&raw1[..]);
36 2 : let mut buf2 = &raw1[..];
37 2 : let dec1 = decode_header_data(&mut buf1);
38 2 : let dec2 = decode2(&mut buf2);
39 2 : assert_eq!(dec1, dec2);
40 2 : assert_eq!(buf1, buf2);
41 2 : }
|