ctrf_rs/insights/
test_insights.rs1use super::metric_delta::MetricDelta;
3
4use crate::impl_extra;
6
7use std::{collections::HashMap, time::Duration};
9
10use serde::{Deserialize, Serialize};
12use serde_json::Value;
13
14#[derive(Serialize, Deserialize, Default, Debug, PartialEq)]
17#[serde(rename_all = "camelCase")]
18pub struct TestInsights {
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub pass_rate: Option<MetricDelta<f64>>,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub fail_rate: Option<MetricDelta<f64>>,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub flaky_rate: Option<MetricDelta<f64>>,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub average_test_duration: Option<MetricDelta<Duration>>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub p95_run_duration: Option<MetricDelta<Duration>>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub executed_in_runs: Option<usize>,
31 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
32 extra: HashMap<String, Value>,
33}
34
35impl TestInsights {
36 pub fn new() -> Self {
38 Self::default()
39 }
40}
41
42impl_extra!(TestInsights);