use core::fmt;
use std::fmt::{Display, Formatter};
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct BenchId {
pub runner_name: Option<String>,
pub group_name: Option<String>,
pub bench_name: String,
}
impl Display for BenchId {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.get_full_name())
}
}
impl BenchId {
pub(crate) fn from_bench_name<S: Into<String>>(bench_name: S) -> Self {
BenchId {
runner_name: None,
group_name: None,
bench_name: bench_name.into(),
}
}
pub(crate) fn runner_name(mut self, name: Option<&str>) -> Self {
self.runner_name = name.map(|el| el.to_owned());
self
}
pub(crate) fn group_name(mut self, name: Option<String>) -> Self {
self.group_name = name;
self
}
pub fn get_full_name(&self) -> String {
get_bench_id(
self.runner_name.as_deref().unwrap_or_default(),
self.group_name.as_deref().unwrap_or_default(),
&self.bench_name,
)
}
}
pub fn get_bench_id(runner_name: &str, group_name: &str, bench_name: &str) -> String {
format!("{}_{}_{}", runner_name, group_name, bench_name).replace('/', "-")
}