git_perf/parsers/
types.rs

1use std::collections::HashMap;
2
3/// Represents a parsed measurement from various input formats
4#[derive(Debug, Clone, PartialEq)]
5pub enum ParsedMeasurement {
6    Test(TestMeasurement),
7    Benchmark(BenchmarkMeasurement),
8}
9
10/// Represents a test measurement from test runners (e.g., JUnit XML)
11#[derive(Debug, Clone, PartialEq)]
12pub struct TestMeasurement {
13    pub name: String,
14    pub duration: Option<std::time::Duration>,
15    pub status: TestStatus,
16    pub metadata: HashMap<String, String>,
17}
18
19/// Test execution status
20#[derive(Debug, Clone, Copy, PartialEq, Eq)]
21pub enum TestStatus {
22    Passed,
23    Failed,
24    Error,
25    Skipped,
26}
27
28impl TestStatus {
29    #[must_use]
30    pub fn as_str(&self) -> &'static str {
31        match self {
32            TestStatus::Passed => "passed",
33            TestStatus::Failed => "failed",
34            TestStatus::Error => "error",
35            TestStatus::Skipped => "skipped",
36        }
37    }
38}
39
40/// Represents a benchmark measurement from benchmark tools (e.g., criterion)
41#[derive(Debug, Clone, PartialEq)]
42pub struct BenchmarkMeasurement {
43    pub id: String,
44    pub statistics: BenchStatistics,
45    pub metadata: HashMap<String, String>,
46}
47
48/// Benchmark statistics from criterion output
49#[derive(Debug, Clone, PartialEq)]
50pub struct BenchStatistics {
51    pub mean_ns: Option<f64>,
52    pub median_ns: Option<f64>,
53    pub slope_ns: Option<f64>,
54    pub mad_ns: Option<f64>,
55    pub unit: String,
56}
57
58/// Trait for parsers that convert external formats to ParsedMeasurement
59pub trait Parser {
60    fn parse(&self, input: &str) -> anyhow::Result<Vec<ParsedMeasurement>>;
61}