use super::LITTLE_ENDIAN;
use crate::dbg_dmp;
use nom::number::complete::{u16, u32};
use nom::*;
#[derive(Debug, PartialEq, Default, Clone)]
pub struct MPQHashTableEntry {
pub hash_a: u32,
pub hash_b: u32,
pub locale: u16,
pub platform: u16,
pub block_table_index: u32,
}
impl MPQHashTableEntry {
pub fn new(
hash_a: u32,
hash_b: u32,
locale: u16,
platform: u16,
block_table_index: u32,
) -> Self {
Self {
hash_a,
hash_b,
locale,
platform,
block_table_index,
}
}
pub fn parse(input: &[u8]) -> IResult<&[u8], Self> {
let (tail, hash_a) = Self::parse_hash_a(input)?;
let (tail, hash_b) = Self::parse_hash_b(tail)?;
let (tail, locale) = Self::parse_locale(tail)?;
let (tail, platform) = Self::parse_platform(tail)?;
let (tail, block_table_index) = Self::parse_block_table_index(tail)?;
Ok((
tail,
MPQHashTableEntry {
hash_a,
hash_b,
locale,
platform,
block_table_index,
},
))
}
pub fn parse_hash_a(input: &[u8]) -> IResult<&[u8], u32> {
dbg_dmp(u32(LITTLE_ENDIAN), "hash_a")(input)
}
pub fn parse_hash_b(input: &[u8]) -> IResult<&[u8], u32> {
dbg_dmp(u32(LITTLE_ENDIAN), "hash_b")(input)
}
pub fn parse_locale(input: &[u8]) -> IResult<&[u8], u16> {
dbg_dmp(u16(LITTLE_ENDIAN), "locale")(input)
}
pub fn parse_platform(input: &[u8]) -> IResult<&[u8], u16> {
dbg_dmp(u16(LITTLE_ENDIAN), "platform")(input)
}
pub fn parse_block_table_index(input: &[u8]) -> IResult<&[u8], u32> {
dbg_dmp(u32(LITTLE_ENDIAN), "block_table_index")(input)
}
}