ctrf_rs/
baseline.rs

1// crate import(s)
2use crate::impl_extra;
3
4// std import(s)
5use std::collections::HashMap;
6
7// other import(s)
8use serde::{Deserialize, Serialize};
9use serde_json::Value;
10
11/// Result Baseline element for a CTRF report.
12/// Corresponds to the spec's ["Baseline"](https://www.ctrf.io/docs/specification/baseline) object.
13#[derive(Serialize, Deserialize, Default, Debug, PartialEq)]
14#[serde(rename_all = "camelCase")]
15pub struct Baseline {
16    pub report_id: String,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub source: Option<String>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub timestamp: Option<String>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub build_name: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub build_number: Option<u64>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub build_url: Option<String>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub commit: Option<String>,
29    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
30    extra: HashMap<String, Value>,
31}
32
33impl Baseline {
34    /// Creates a `Baseline` instance with the provided `report_id` and default values otherwise
35    pub fn new(report_id: String) -> Self {
36        Self {
37            report_id,
38            ..Default::default()
39        }
40    }
41}
42
43impl_extra!(Baseline);