vault 11.0.1

A parser for Company of Heroes replay files.
Documentation
use crate::data::parser::verify_le_u32;
use crate::data::ticks::{Bundle, Tick, Tick::Command};
use crate::data::{ParserResult, Span};
use nom::combinator::map;
use nom::multi::{length_count, length_value};
use nom::number::complete::{le_u32, le_u8};
use nom::sequence::tuple;
use nom_tracable::tracable_parser;

#[derive(Debug)]
pub struct CommandTick {
    _id: u32,
    _tick_type: u32,
    pub bundles: Vec<Bundle>,
}

impl CommandTick {
    #[tracable_parser]
    pub fn parse_tick(input: Span) -> ParserResult<Tick> {
        map(
            tuple((
                verify_le_u32(0),
                length_value(
                    le_u32,
                    tuple((
                        le_u8,
                        le_u32,
                        le_u32,
                        length_count(le_u32, Bundle::parse_bundle),
                    )),
                ),
            )),
            |(tick_type, (_, id, _, bundles))| {
                Command(CommandTick {
                    _id: id,
                    _tick_type: tick_type,
                    bundles,
                })
            },
        )(input)
    }
}