git_perf/parsers/
types.rs1use std::collections::HashMap;
2
3#[derive(Debug, Clone, PartialEq)]
5pub enum ParsedMeasurement {
6 Test(TestMeasurement),
7 Benchmark(BenchmarkMeasurement),
8}
9
10#[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#[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#[derive(Debug, Clone, PartialEq)]
42pub struct BenchmarkMeasurement {
43 pub id: String,
44 pub statistics: BenchStatistics,
45 pub metadata: HashMap<String, String>,
46}
47
48#[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
58pub trait Parser {
60 fn parse(&self, input: &str) -> anyhow::Result<Vec<ParsedMeasurement>>;
61}