vault 11.0.1

A parser for Company of Heroes replay files.
Documentation
use crate::data::chunks::{
    DataAutoChunk, DataDataChunk, DataSdscChunk, FoldChunk, Header, TrashDataChunk,
};
use crate::data::{ParserResult, Span};

#[derive(Debug)]
pub enum Chunk {
    Fold(FoldChunk),
    Data(#[allow(unused)] TrashDataChunk),
    DataAuto(DataAutoChunk),
    DataData(DataDataChunk),
    DataSdsc(DataSdscChunk),
}

impl Chunk {
    pub fn parse(version: u16) -> impl FnMut(Span) -> ParserResult<Chunk> {
        move |input: Span| {
            let (input, header) = Header::parse(input)?;

            match &header.chunk_kind as &str {
                "DATA" => match &header.chunk_type as &str {
                    "AUTO" => DataAutoChunk::parse(input, header),
                    "DATA" => DataDataChunk::parse(input, header),
                    "SDSC" => DataSdscChunk::parse(input, header),
                    _ => TrashDataChunk::parse(input, header),
                },
                "FOLD" => FoldChunk::parse(input, header, version),
                _ => panic!(),
            }
        }
    }
}