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 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#[derive(Debug, Clone, PartialEq)]
41pub struct BenchmarkMeasurement {
42 pub id: String,
43 pub statistics: BenchStatistics,
44 pub metadata: HashMap<String, String>,
45}
46
47#[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
57pub trait Parser {
59 fn parse(&self, input: &str) -> anyhow::Result<Vec<ParsedMeasurement>>;
60}