Files
mhlib/rust/src/formats/datafile.rs
2023-05-04 00:32:54 +02:00

47 lines
853 B
Rust

use binrw::{binread, NullString};
use std::collections::HashMap;
#[binread]
#[br(little, magic = b"MHJNR")]
#[derive(Debug)]
pub struct Datafile {
#[br(align_after = 0x20)]
pub edition: Edition,
#[br(temp)]
pub count: u32,
#[br(align_after = 0x20)]
pub unk1: u32,
#[br(count = count)]
pub files: Vec<FileEntry>,
}
#[binread]
#[derive(Debug)]
pub enum Edition {
#[br(magic = b"-XS")]
Xs,
#[br(magic = b"-XXL")]
Xxl,
}
#[derive(Debug)]
#[binread]
pub struct FileEntry {
#[br(pad_size_to = 0x68)]
pub name: NullString,
pub pos: u32,
#[br(pad_after = 0x10)]
pub len: u32,
}
impl Datafile {
pub fn into_index(self) -> HashMap<String, FileEntry> {
self.files
.into_iter()
.map(|entry| (entry.name.to_string(), entry))
.collect()
}
}