use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main};

use static_web_server::static_files;

#[derive(Debug)]
struct Inputs<'a> {
    base_path: &'a std::path::Path,
    uri_path: &'a str,
}
impl std::fmt::Display for Inputs<'_> {
    fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
        write!(fmt, "{:?}", self)
    }
}

fn sanitize_path_benchmark(c: &mut Criterion) {
    let base_path = std::path::Path::new("root/../");
    let uri_path: &str = "../assets/../../.../image.jpg";
    let inputs = Inputs {
        base_path,
        uri_path,
    };
    c.bench_with_input(BenchmarkId::new("path_inputs", &inputs), &inputs, |b, s| {
        b.iter(|| static_files::sanitize_path(s.base_path, s.uri_path))
    });
}

criterion_group!(static_files_bench, sanitize_path_benchmark);
criterion_main!(static_files_bench);
