vault 11.0.1

A parser for Company of Heroes replay files.
Documentation
use crate::data::chunks::{Chunk, Chunk::Fold, Header};
use crate::data::{ParserResult, Span};
use nom::bytes::complete::take;
use nom::combinator::{cut, eof, map, map_parser};
use nom::multi::many0;
use nom::sequence::terminated;

#[derive(Debug)]
pub struct FoldChunk {
    _header: Header,
    pub chunks: Vec<Chunk>,
}

impl FoldChunk {
    pub fn parse(input: Span, header: Header, version: u16) -> ParserResult<Chunk> {
        cut(map_parser(
            take(header.length),
            terminated(
                map(
                    map_parser(take(header.length), many0(Chunk::parse(version))),
                    move |chunks| {
                        Fold(FoldChunk {
                            _header: header.clone(),
                            chunks,
                        })
                    },
                ),
                eof,
            ),
        ))(input)
    }
}