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    pub fn as_str(&self) -> &'static str {
30        match self {
31            TestStatus::Passed => "passed",
32            TestStatus::Failed => "failed",
33            TestStatus::Error => "error",
34            TestStatus::Skipped => "skipped",
35        }
36    }
37}
38
39/// Represents a benchmark measurement from benchmark tools (e.g., criterion)
40#[derive(Debug, Clone, PartialEq)]
41pub struct BenchmarkMeasurement {
42    pub id: String,
43    pub statistics: BenchStatistics,
44    pub metadata: HashMap<String, String>,
45}
46
47/// Benchmark statistics from criterion output
48#[derive(Debug, Clone, PartialEq)]
49pub struct BenchStatistics {
50    pub mean_ns: Option<f64>,
51    pub median_ns: Option<f64>,
52    pub slope_ns: Option<f64>,
53    pub mad_ns: Option<f64>,
54    pub unit: String,
55}
56
57/// Trait for parsers that convert external formats to ParsedMeasurement
58pub trait Parser {
59    fn parse(&self, input: &str) -> anyhow::Result<Vec<ParsedMeasurement>>;
60}