use super::LITTLE_ENDIAN;
use crate::dbg_dmp;
use nom::number::complete::u32;
use nom::*;
#[derive(Debug, PartialEq, Default, Clone)]
pub struct MPQBlockTableEntry {
pub offset: u32,
pub archived_size: u32,
pub size: u32,
pub flags: u32,
}
impl MPQBlockTableEntry {
pub fn new(offset: u32, archived_size: u32, size: u32, flags: u32) -> Self {
Self {
offset,
archived_size,
size,
flags,
}
}
pub fn parse(input: &[u8]) -> IResult<&[u8], Self> {
let (tail, offset) = Self::parse_offset(input)?;
let (tail, archived_size) = Self::parse_archived_size(tail)?;
let (tail, size) = Self::parse_size(tail)?;
let (tail, flags) = Self::parse_flags(tail)?;
Ok((
tail,
MPQBlockTableEntry {
offset,
archived_size,
size,
flags,
},
))
}
pub fn parse_offset(input: &[u8]) -> IResult<&[u8], u32> {
dbg_dmp(u32(LITTLE_ENDIAN), "offset")(input)
}
pub fn parse_archived_size(input: &[u8]) -> IResult<&[u8], u32> {
dbg_dmp(u32(LITTLE_ENDIAN), "archive_size")(input)
}
pub fn parse_size(input: &[u8]) -> IResult<&[u8], u32> {
dbg_dmp(u32(LITTLE_ENDIAN), "size")(input)
}
pub fn parse_flags(input: &[u8]) -> IResult<&[u8], u32> {
dbg_dmp(u32(LITTLE_ENDIAN), "flags")(input)
}
}