1use std::io::{Read, Write};
8
9use crate::PsbError;
10
11use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
12
13#[derive(Debug, Clone, Copy)]
15pub struct PsbHeader {
16
17 pub version: u16,
19 pub encryption: u16
21
22}
23
24impl PsbHeader {
25
26 pub fn from_bytes(stream: &mut impl Read) -> Result<(u64, Self), PsbError> {
29 let version = stream.read_u16::<LittleEndian>()?;
30 let encryption = stream.read_u16::<LittleEndian>()?;
31
32 Ok((4, Self {
33 version,
34 encryption
35 }))
36 }
37
38 pub fn write_bytes(&self, stream: &mut impl Write) -> Result<u64, PsbError> {
41 stream.write_u16::<LittleEndian>(self.version)?;
42 stream.write_u16::<LittleEndian>(self.encryption)?;
43
44 Ok(8)
45 }
46
47}
48
49pub struct MdfHeader {
51
52 pub size: u32
54
55}
56
57impl MdfHeader {
58
59 pub fn from_bytes(stream: &mut impl Read) -> Result<(u64, Self), PsbError> {
62 Ok((4, Self { size: stream.read_u32::<LittleEndian>()? }))
63 }
64
65 pub fn write_bytes(&self, stream: &mut impl Write) -> Result<u64, PsbError> {
68 stream.write_u32::<LittleEndian>(self.size)?;
69
70 Ok(4)
71 }
72
73}