infinite_rs/module/
block.rs1use byteorder::{LE, ReadBytesExt};
4use std::io::BufRead;
5
6use crate::Result;
7use crate::common::errors::ModuleError;
8use crate::common::extensions::Enumerable;
9
10#[derive(Default, Debug)]
11pub(crate) struct ModuleBlockEntry {
14 pub(super) compressed_offset: u32,
16 pub(super) compressed_size: u32,
18 pub(super) decompressed_offset: u32,
20 pub(super) decompressed_size: u32,
22 pub(super) is_compressed: bool,
25}
26
27impl Enumerable for ModuleBlockEntry {
28 fn read<R: BufRead>(&mut self, reader: &mut R) -> Result<()> {
29 self.compressed_offset = reader.read_u32::<LE>()?;
30 self.compressed_size = reader.read_u32::<LE>()?;
31 self.decompressed_offset = reader.read_u32::<LE>()?;
32 self.decompressed_size = reader.read_u32::<LE>()?;
33 let temp_compressed = reader.read_u32::<LE>()?;
34 if temp_compressed != 0 && temp_compressed != 1 {
35 return Err(ModuleError::IncorrectCompressedValue.into());
36 }
37 self.is_compressed = temp_compressed != 0;
38 Ok(())
39 }
40}