serde-querystring 0.0.6

A query string deserializer based on serde
Documentation
use std::error::Error;

use criterion::{criterion_group, criterion_main, Criterion};
use serde::Deserialize;

#[derive(Debug, Deserialize, PartialEq)]
struct Level4 {
    x4: String,
    y4: String,
    z4: String,
}
#[derive(Debug, Deserialize, PartialEq)]
struct Level3 {
    x3: Level4,
    y3: Level4,
    z3: Level4,
}
#[derive(Debug, Deserialize, PartialEq)]
struct Level2 {
    x2: Level3,
    y2: Level3,
    z2: Level3,
}
#[derive(Debug, Deserialize, PartialEq)]
struct Level1 {
    x1: Level2,
    y1: Level2,
    z1: Level2,
}

#[derive(Debug, Deserialize, PartialEq)]
struct Sample {
    x0: Level1,
    y0: Level1,
    z0: Level1,
}

fn deserialize(input: &str) -> Result<Sample, impl Error> {
    serde_querystring::from_str::<Sample>(input)
}

fn ordered(c: &mut Criterion) {
    let ordered = include_str!("../tests/multilevel_ordered.txt");

    c.bench_function("multilevel ordered", |b| b.iter(|| deserialize(ordered)));
}

fn unordered(c: &mut Criterion) {
    let unordered = include_str!("../tests/multilevel_unordered.txt");

    c.bench_function("multilevel unordered", |b| {
        b.iter(|| deserialize(unordered))
    });
}

criterion_group!(benches, ordered, unordered);
criterion_main!(benches);