use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
use flatten_serde_json::flatten;
use serde_json::json;

pub fn flatten_simple(c: &mut Criterion) {
    let mut input = json!({
      "a": {
        "b": "c",
        "d": "e",
        "f": "g"
      }
    });
    let object = input.as_object_mut().unwrap();

    c.bench_with_input(BenchmarkId::new("flatten", "simple"), &object, |b, input| {
        b.iter(|| flatten(input))
    });
}

pub fn flatten_complex(c: &mut Criterion) {
    let mut input = json!({
      "a": [
        "b",
        ["c", "d"],
        { "e": ["f", "g"] },
        [
            { "h": "i" },
            { "e": ["j", { "z": "y" }] },
        ],
        ["l"],
        "m",
      ]
    });
    let object = input.as_object_mut().unwrap();

    c.bench_with_input(BenchmarkId::new("flatten", "complex"), &object, |b, input| {
        b.iter(|| flatten(input))
    });
}

criterion_group!(benches, flatten_simple, flatten_complex);
criterion_main!(benches);