You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: image_benches.rs
    path of file: ./repos/kanidm/server/lib/benches
    
    the code of the file until where you have to start completion: /// This file contains benchmarks for the image module so we can work out the best order to run things in
use std::time::Duration;

use criterion::{black_box, criterion_group, criterion_main, Criterion};
use kanidmd_lib::valueset::image::jpg;
use kanidmd_lib::valueset::image::png;

pub fn bench_p
    
pub fn bench_png_lodepng_validate(c: &mut Criterion) {
    let mut group = c.benchmark_group("png_lodepng_validate");
    group.bench_function("png_lodepng_validate_oversize", |b| {
        let filename = black_box(format!(
            "{}/src/valueset/image/test_images/oversize_dimensions.png",
            env!("CARGO_MANIFEST_DIR")
        ));
        let contents = black_box(std::fs::read(filename).unwrap());
        b.iter(|| {
            png::png_lodepng_validate(&contents, black_box(&"oversize_dimensions.png".to_string()))
        })
    });
    group.bench_function("png_lodepng_validate_ok", |b| {
        let filename = black_box(format!(
            "{}/src/valueset/image/test_images/oversize_dimensions.png",
            env!("CARGO_MANIFEST_DIR")
        ));
        let contents = black_box(std::fs::read(filename).unwrap());
        b.iter(|| {
            png::png_lodepng_validate(&contents, black_box(&"oversize_dimensions.png".to_string()))
        })
    });
    group.finish();
}