assembly 0.4.1

Library for files/resources for LU related software
Documentation
use nom::{le_u32};
use super::core::*;
use crate::core::parser::{parse_u32_string};
use std::collections::BTreeMap;
use std::convert::TryFrom;

struct FileRefData {
    filename_crc: u32,
    #[allow(dead_code)]
    left: u32,
    #[allow(dead_code)]
    right: u32,
    pack_file: u32,
    category: u32,
}

fn extend_map(mut map: BTreeMap<u32, FileRef>, data: FileRefData) -> BTreeMap<u32, FileRef> {
    map.insert(data.filename_crc, FileRef{category: data.category, pack_file: data.pack_file});
    map
}

named!(parse_file_ref<FileRefData>,
    do_parse!(
        filename_crc: le_u32 >>
        left: le_u32 >>
        right: le_u32 >>
        pack_file: le_u32 >>
        category: le_u32 >>
        (FileRefData{filename_crc, left, right, pack_file, category})
    )
);

named!(parse_pack_file_ref<PackFileRef>,
    do_parse!(
        path: parse_u32_string >>
        (PackFileRef{path})
    )
);

named!(pub parse_pki_file<PackIndexFile>,
    do_parse!(
        _version: tag!(u32::to_le_bytes(3)) >>
        archives: length_count!(le_u32, parse_pack_file_ref) >>
        file_count: map_res!(le_u32, usize::try_from) >>
        files: fold_many_m_n!(file_count, file_count, parse_file_ref, BTreeMap::new(), extend_map) >>
        (PackIndexFile{archives,files})
    )
);