use std::collections::HashMap;
#[derive(Debug, Clone, PartialEq)]
pub enum ParsedMeasurement {
Test(TestMeasurement),
Benchmark(BenchmarkMeasurement),
}
#[derive(Debug, Clone, PartialEq)]
pub struct TestMeasurement {
pub name: String,
pub duration: Option<std::time::Duration>,
pub status: TestStatus,
pub metadata: HashMap<String, String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TestStatus {
Passed,
Failed,
Error,
Skipped,
}
impl TestStatus {
#[must_use]
pub fn as_str(&self) -> &'static str {
match self {
TestStatus::Passed => "passed",
TestStatus::Failed => "failed",
TestStatus::Error => "error",
TestStatus::Skipped => "skipped",
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct BenchmarkMeasurement {
pub id: String,
pub statistics: BenchStatistics,
pub metadata: HashMap<String, String>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct BenchStatistics {
pub mean_ns: Option<f64>,
pub median_ns: Option<f64>,
pub slope_ns: Option<f64>,
pub mad_ns: Option<f64>,
pub unit: String,
}
pub trait Parser {
fn parse(&self, input: &str) -> anyhow::Result<Vec<ParsedMeasurement>>;
}