pktstrings 1.4.1

Like Unix 'strings' command but packet-aware
Documentation
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};

use pktstrings::net;

mod meta;

fn net(c: &mut Criterion) {
    let mut field_group = c.benchmark_group("Byte Field Conversion");
    for bytelen in 0..16 {
        field_group.throughput(Throughput::Bytes(bytelen as u64));
        field_group.bench_with_input(
            BenchmarkId::new("get_field", bytelen),
            &bytelen,
            |b, bytelen| {
                b.iter(|| net::get_field(meta::DATA, 0, *bytelen));
            },
        );
    }
    field_group.finish();

    let mut parsing_group = c.benchmark_group("Packet Parsing");
    parsing_group.bench_function(BenchmarkId::new("from_packet", "IPv4"), |b| {
        b.iter(|| net::PacketSummary::from_packet(&meta::REF_V4_PACKET, None));
    });
    parsing_group.bench_function(BenchmarkId::new("from_packet", "IPv6"), |b| {
        b.iter(|| net::PacketSummary::from_packet(&meta::REF_V6_PACKET, None));
    });
    parsing_group.finish();

    let mut summary_group = c.benchmark_group("Packet Summary");
    summary_group.bench_function(BenchmarkId::new("from_packet_and_formatted", "IPv4"), |b| {
        b.iter(|| {
            let mut pktsum = net::PacketSummary::from_packet(&meta::REF_V4_PACKET, None);
            pktsum.formatted();
        });
    });
    summary_group.bench_function(BenchmarkId::new("from_packet_and_formatted", "IPv6"), |b| {
        b.iter(|| {
            let mut pktsum = net::PacketSummary::from_packet(&meta::REF_V6_PACKET, None);
            pktsum.formatted();
        });
    });
    summary_group.finish();
}

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