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