rulemorph 0.3.4

YAML-based declarative data transformation engine for CSV/JSON to JSON
Documentation
mod common;

use common::{SIMPLE_RULES, elements, parse_rule, simple_input};
use criterion::{Criterion, black_box, criterion_group, criterion_main};
use rulemorph::{InputData, TransformTraceOptions, transform, transform_input_with_trace};

fn bench_trace_overhead(c: &mut Criterion) {
    let record_count = 1_000usize;
    let rule = parse_rule(SIMPLE_RULES);
    let input = simple_input(record_count);
    let metadata_only = TransformTraceOptions::metadata_only();
    let raw = TransformTraceOptions::raw();

    let mut group = c.benchmark_group("trace/simple");
    group.throughput(elements(record_count));

    group.bench_function("trace_off", |b| {
        b.iter(|| {
            let output = transform(&rule, black_box(&input), None).expect("transform failed");
            black_box(output);
        })
    });

    group.bench_function("trace_metadata_only", |b| {
        b.iter(|| {
            let result = transform_input_with_trace(
                &rule,
                InputData::Text(black_box(&input)),
                None,
                &metadata_only,
            )
            .expect("trace transform failed");
            let event_count: usize = result
                .trace
                .records
                .iter()
                .map(|record| record.events.len())
                .sum();
            black_box(result.output);
            black_box(event_count);
        })
    });

    group.bench_function("trace_raw", |b| {
        b.iter(|| {
            let result =
                transform_input_with_trace(&rule, InputData::Text(black_box(&input)), None, &raw)
                    .expect("trace transform failed");
            let event_count: usize = result
                .trace
                .records
                .iter()
                .map(|record| record.events.len())
                .sum();
            black_box(result.output);
            black_box(event_count);
        })
    });

    group.finish();
}

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