mvdparser 0.18.1

Extract information from QuakeWorld MVD demos.
Documentation
use anyhow::{anyhow as e, Result};

use crate::serverinfo;

pub fn filename(data: &[u8]) -> Result<String> {
    let Some(serverdemo) = serverinfo(data)?.serverdemo else {
        return Err(e!("Filename not found"));
    };
    Ok(serverdemo)
}

#[cfg(test)]
mod tests {
    use std::fs::read;

    use anyhow::Result;
    use pretty_assertions::assert_eq;

    use super::*;

    #[test]
    fn test_filename() -> Result<()> {
        assert_eq!(
            filename(&read(
                "tests/files/ctf_blue_vs_red[ctf5]20240520-1925.mvd.ktxstats.json"
            )?)
            .unwrap_err()
            .to_string(),
            "Serverinfo not found".to_string()
        );

        assert_eq!(
            filename(&read(
                "tests/files/2on2_sf_vs_red[frobodm2]220104-0915.mvd"
            )?)?,
            "2on2_sf_vs_red[frobodm2]220104-0915.mvd".to_string()
        );

        assert_eq!(
            filename(&read("tests/files/4on4_oeks_vs_tsq[dm2]20240426-1716.mvd")?)?,
            "4on4_oeks_vs_tsq[dm2]20240426-1716.mvd".to_string()
        );

        assert_eq!(
            filename(&read("tests/files/ctf_blue_vs_red[ctf5]20240520-1925.mvd")?)?,
            "ctf_blue_vs_red[ctf5]20240520-1925.mvd".to_string()
        );

        assert_eq!(
            filename(&read(
                "tests/files/duel_equ_vs_kaboom[povdmm4]20240422-1038.mvd"
            )?)?,
            "duel_equ_vs_kaboom[povdmm4]20240422-1038.mvd".to_string()
        );

        assert_eq!(
            filename(&read(
                "tests/files/duel_holy_vs_dago[bravado]20240426-1659.mvd"
            )?)?,
            "duel_holy_vs_dago[bravado]20240426-1659.mvd".to_string()
        );

        assert_eq!(
            filename(&read("tests/files/ffa_5[dm4]20240501-1229.mvd")?)?,
            "ffa_5[dm4]20240501-1229.mvd".to_string()
        );

        assert_eq!(
            filename(&read(
                "tests/files/wipeout_red_vs_blue[q3dm6qw]20240406-2028.mvd"
            )?)?,
            "wipeout_red_vs_blue[q3dm6qw]20240406-2028.mvd".to_string()
        );

        Ok(())
    }
}