tf2-enum 0.13.0

Provides enumerated types for models related to the Team Fortress 2 item schema.
Documentation
use criterion::{criterion_group, criterion_main, Criterion};
use std::collections::HashMap;

fn match_group(defindex: u32) -> Option<&'static str> {
    match defindex {
        0 => Some("Bat"),
        1 => Some("Bottle"),
        2 => Some("Fire Axe"),
        3 => Some("Kukri"),
        4 => Some("Knife"),
        5 => Some("Fists"),
        6 => Some("Shovel"),
        7 => Some("Wrench"),
        8 => Some("Bonesaw"),
        9..=12 => Some("Shotgun"),
        13 => Some("Scattergun"),
        14 => Some("Sniper Rifle"),
        15 => Some("Minigun"),
        16 => Some("SMG"),
        17 => Some("Syringe Gun"),
        18 => Some("Rocket Launcher"),
        19 => Some("Grenade Launcher"),
        20 => Some("Stickybomb Launcher"),
        21 => Some("Flame Thrower"),
        22 | 23  => Some("Pistol"),
        24 => Some("Revolver"),
        25 => Some("Construction PDA"),
        26 => Some("Destruction PDA"),
        27 => Some("Disguise Kit"),
        28 => Some("PDA"),
        29 => Some("Medi Gun"),
        30 => Some("Invis Watch"),
        _ => None,
    }
}

fn criterion_benchmark(c: &mut Criterion) {
    let items = vec![
        (0, "Bat"),
        (1, "Bottle"),
        (2, "Fire Axe"),
        (3, "Kukri"),
        (4, "Knife"),
        (5, "Fists"),
        (6, "Shovel"),
        (7, "Wrench"),
        (8, "Bonesaw"),
        (9, "Shotgun"),
        (10, "Shotgun"),
        (11, "Shotgun"),
        (12, "Shotgun"),
        (13, "Scattergun"),
        (14, "Sniper Rifle"),
        (15, "Minigun"),
        (16, "SMG"),
        (17, "Syringe Gun"),
        (18, "Rocket Launcher"),
        (19, "Grenade Launcher"),
        (20, "Stickybomb Launcher"),
        (21, "Flame Thrower"),
        (22, "Pistol"),
        (23, "Pistol"),
        (24, "Revolver"),
        (25, "Construction PDA"),
        (26, "Destruction PDA"),
        (27, "Disguise Kit"),
        (28, "PDA"),
        (29, "Medi Gun"),
        (30, "Invis Watch"),
    ];
    let hash_map: HashMap<u32, &'static str> = items.into_iter().collect();
    
    c.bench_function("match", |b| b.iter(|| {
        match_group(30)
    }));
    
    c.bench_function("hash", |b| b.iter(|| {
        hash_map.get(&30)
    }));
}

criterion_group!{
    name = benches;
    config = Criterion::default().sample_size(100);
    targets = criterion_benchmark
}
 
criterion_main!(benches);