serde_header 0.2.0

Strongly typed HTTP Header library for Rust, built upon serde
use criterion::{black_box, criterion_group, criterion_main, Criterion};

use serde::Deserialize;
use serde_header::from_http_header_map;

#[derive(Deserialize, Debug)]
struct Test {
    test_i8: i8,
    test_i16: i16,
    test_i32: i32,
    test_i64: i64,
    test_i128: i128,
    test_u8: u8,
    test_u16: u16,
    test_u32: u32,
    test_u64: u64,
    test_u128: u128,

    test_f32: f32,
    test_f64: f64,

    test_string: String,
    test_char: char,
}

fn test(c: &mut Criterion) {
    let mut h = http::header::HeaderMap::new();
    h.insert("test_i8", "100".parse().unwrap());
    h.insert("test_i16", "100".parse().unwrap());
    h.insert("test_i32", "100".parse().unwrap());
    h.insert("test_i64", "100".parse().unwrap());
    h.insert("test_i128", "100".parse().unwrap());
    h.insert("test_u8", "100".parse().unwrap());
    h.insert("test_u16", "100".parse().unwrap());
    h.insert("test_u32", "100".parse().unwrap());
    h.insert("test_u64", "100".parse().unwrap());
    h.insert("test_u128", "100".parse().unwrap());

    h.insert("test_f32", "100".parse().unwrap());
    h.insert("test_f64", "100".parse().unwrap());

    h.insert("test_string", "Hello, world!".parse().unwrap());
    h.insert("test_char", "".parse().unwrap());

    c.bench_function("test", |b| {
        b.iter(|| {
            let t: Test = from_http_header_map(&h).unwrap();
        });
    });
}

criterion_group!(benches, test);
criterion_main!(benches);