kermit_bench/benchmarks/
mod.rs1use {crate::benchmark::BenchmarkConfig, clap::ValueEnum, std::str::FromStr};
2
3pub mod oxford;
4
5#[derive(Copy, Clone, PartialEq, Eq, Debug, ValueEnum)]
6pub enum Benchmark {
7 Oxford,
8}
9
10impl Benchmark {
11 pub fn from_name(name: &str) -> Result<Self, Box<dyn std::error::Error>> {
12 if name == Benchmark::Oxford.name() {
13 Ok(Self::Oxford)
14 } else {
15 Err(format!("Benchmark '{}' not found", name).into())
16 }
17 }
18
19 pub fn names() -> Vec<String> { vec![Self::Oxford.name()] }
20
21 pub fn name(self) -> String { self.config().metadata().name.to_string() }
22
23 pub fn config(self) -> Box<dyn BenchmarkConfig + 'static> {
24 match self {
25 | Self::Oxford => Box::new(oxford::OxfordBenchmark),
26 }
27 }
28}
29
30impl FromStr for Benchmark {
31 type Err = String;
32
33 fn from_str(s: &str) -> Result<Self, Self::Err> {
34 Self::from_name(s).map_err(|e| e.to_string())
35 }
36}