fetch-kit 0.2.0

Resilient HTTP client for Rust — retry, circuit breaker, connection pooling, and typed JSON helpers built on reqwest
Documentation
// The bench drives the builder knobs; the retry-shaped ones live behind
// the `retry` feature, so the retry-heavy benches are feature-gated and a
// stub main keeps `--no-default-features --all-targets` compiling.
use criterion::{Criterion, criterion_group, criterion_main};
use fetch_kit::ClientBuilder;
#[cfg(feature = "retry")]
use std::time::Duration;

fn bench_client_builder_default(c: &mut Criterion) {
    c.bench_function("client_builder_default", |b| {
        b.iter(|| {
            let builder = ClientBuilder::new();
            std::hint::black_box(builder);
        });
    });
}

#[cfg(feature = "retry")]
fn bench_client_builder_with_options(c: &mut Criterion) {
    c.bench_function("client_builder_with_options", |b| {
        b.iter(|| {
            let builder = ClientBuilder::new()
                .base_url("https://api.example.com")
                .timeout(Duration::from_secs(10))
                .retries(5);
            std::hint::black_box(builder);
        });
    });
}

fn bench_client_build(c: &mut Criterion) {
    c.bench_function("client_build", |b| {
        b.iter(|| {
            let client = ClientBuilder::new().build();
            std::hint::black_box(client);
        });
    });
}

fn bench_client_build_with_base_url(c: &mut Criterion) {
    c.bench_function("client_build_with_base_url", |b| {
        b.iter(|| {
            let client = ClientBuilder::new()
                .base_url("https://api.example.com")
                .build();
            std::hint::black_box(client);
        });
    });
}

#[cfg(feature = "retry")]
fn bench_client_builder_chaining(c: &mut Criterion) {
    c.bench_function("client_builder_chaining", |b| {
        b.iter(|| {
            let client = ClientBuilder::new()
                .base_url("https://api.example.com")
                .timeout(Duration::from_secs(60))
                .retries(10)
                .build();
            std::hint::black_box(client);
        });
    });
}

#[cfg(feature = "retry")]
criterion_group!(
    benches,
    bench_client_builder_default,
    bench_client_builder_with_options,
    bench_client_build,
    bench_client_build_with_base_url,
    bench_client_builder_chaining,
);
#[cfg(not(feature = "retry"))]
criterion_group!(
    benches,
    bench_client_builder_default,
    bench_client_build,
    bench_client_build_with_base_url,
);
criterion_main!(benches);