use super::metric_delta::MetricDelta;
use crate::impl_extra;
use std::{collections::HashMap, time::Duration};
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Serialize, Deserialize, Default, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct TestInsights {
#[serde(skip_serializing_if = "Option::is_none")]
pub pass_rate: Option<MetricDelta<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fail_rate: Option<MetricDelta<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub flaky_rate: Option<MetricDelta<f64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub average_test_duration: Option<MetricDelta<Duration>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub p95_run_duration: Option<MetricDelta<Duration>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub executed_in_runs: Option<usize>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
extra: HashMap<String, Value>,
}
impl TestInsights {
pub fn new() -> Self {
Self::default()
}
}
impl_extra!(TestInsights);