quake_log_parser_lib 0.1.9

A Sample Lib to Parse Quake Game Log.
Documentation
use serde_json::{json, Value};

use crate::death_causes::DeathCauses;

#[derive(Clone, Default)]
pub(crate) struct MatchKillMeans {
    unknown: usize,
    shotgun: usize,
    gauntlet: usize,
    machine_gun: usize,
    grenade: usize,
    grenade_splash: usize,
    rocket: usize,
    rocket_splash: usize,
    plasma: usize,
    plasma_splash: usize,
    railgun: usize,
    lightning: usize,
    bfg: usize,
    bfg_splash: usize,
    water: usize,
    slime: usize,
    lava: usize,
    crush: usize,
    telefrag: usize,
    falling: usize,
    suicide: usize,
    target_laser: usize,
    trigger_hurt: usize,
    nail: usize,
    chaingun: usize,
    proximity_mine: usize,
    kamikaze: usize,
    juiced: usize,
    grapple: usize
}

impl MatchKillMeans {
    pub(crate) fn new() -> Self {
        Self {
            unknown: 0,
            shotgun: 0,
            gauntlet: 0,
            machine_gun: 0,
            grenade: 0,
            grenade_splash: 0,
            rocket: 0,
            rocket_splash: 0,
            plasma: 0,
            plasma_splash: 0,
            railgun: 0,
            lightning: 0,
            bfg: 0,
            bfg_splash: 0,
            water: 0,
            slime: 0,
            lava: 0,
            crush: 0,
            telefrag: 0,
            falling: 0,
            suicide: 0,
            target_laser: 0,
            trigger_hurt: 0,
            nail: 0,
            chaingun: 0,
            proximity_mine: 0,
            kamikaze: 0,
            juiced: 0,
            grapple: 0
        }
    }
    
    pub(crate) fn increase_stat(&mut self, death_cause: DeathCauses) {
        match death_cause {
            DeathCauses::Unknown => self.unknown += 1,
            DeathCauses::Shotgun => self.shotgun += 1,
            DeathCauses::Gauntlet => self.gauntlet += 1,
            DeathCauses::MachineGun => self.machine_gun += 1,
            DeathCauses::Grenade => self.grenade += 1,
            DeathCauses::GrenadeSplash => self.grenade_splash += 1,
            DeathCauses::Rocket => self.rocket += 1,
            DeathCauses::RocketSplash => self.rocket_splash += 1,
            DeathCauses::Plasma => self.plasma += 1,
            DeathCauses::PlasmaSplash => self.plasma_splash += 1,
            DeathCauses::Railgun => self.railgun += 1,
            DeathCauses::Lightning => self.lightning += 1,
            DeathCauses::Bfg => self.bfg += 1,
            DeathCauses::BfgSplash => self.bfg_splash += 1,
            DeathCauses::Water => self.water += 1,
            DeathCauses::Slime => self.slime += 1,
            DeathCauses::Lava => self.lava += 1,
            DeathCauses::Crush => self.crush += 1,
            DeathCauses::Telefrag => self.telefrag += 1,
            DeathCauses::Falling => self.falling += 1,
            DeathCauses::Suicide => self.suicide += 1,
            DeathCauses::TargetLaser => self.target_laser += 1,
            DeathCauses::TriggerHurt => self.trigger_hurt += 1,
            DeathCauses::Nail => self.nail += 1,
            DeathCauses::Chaingun => self.chaingun += 1,
            DeathCauses::ProximityMine => self.proximity_mine += 1,
            DeathCauses::Kamikaze => self.kamikaze += 1,
            DeathCauses::Juiced => self.juiced += 1,
            DeathCauses::Grapple => self.grapple += 1
        }
    }

    pub(crate) fn to_json(&self) -> Value {
        return json!({
            DeathCauses::Unknown.to_string(): &self.unknown,
            DeathCauses::Shotgun.to_string(): &self.shotgun,
            DeathCauses::Gauntlet.to_string(): &self.gauntlet,
            DeathCauses::MachineGun.to_string(): &self.machine_gun,
            DeathCauses::Grenade.to_string(): &self.grenade,
            DeathCauses::GrenadeSplash.to_string(): &self.grenade_splash,
            DeathCauses::Rocket.to_string(): &self.rocket,
            DeathCauses::RocketSplash.to_string(): &self.rocket_splash,
            DeathCauses::Plasma.to_string(): &self.plasma,
            DeathCauses::PlasmaSplash.to_string(): &self.plasma_splash,
            DeathCauses::Railgun.to_string(): &self.railgun,
            DeathCauses::Lightning.to_string(): &self.lightning,
            DeathCauses::Bfg.to_string(): &self.bfg,
            DeathCauses::BfgSplash.to_string(): &self.bfg_splash,
            DeathCauses::Water.to_string(): &self.water,
            DeathCauses::Slime.to_string(): &self.slime,
            DeathCauses::Lava.to_string(): &self.lava,
            DeathCauses::Crush.to_string(): &self.crush,
            DeathCauses::Telefrag.to_string(): &self.telefrag,
            DeathCauses::Falling.to_string(): &self.falling,
            DeathCauses::Suicide.to_string(): &self.suicide,
            DeathCauses::TargetLaser.to_string(): &self.target_laser,
            DeathCauses::TriggerHurt.to_string(): &self.trigger_hurt,
            DeathCauses::Nail.to_string(): &self.nail,
            DeathCauses::Chaingun.to_string(): &self.chaingun,
            DeathCauses::ProximityMine.to_string(): &self.proximity_mine,
            DeathCauses::Kamikaze.to_string(): &self.kamikaze,
            DeathCauses::Juiced.to_string(): &self.juiced,
            DeathCauses::Grapple.to_string(): &self.grapple
        });
    }  
}