ctrf_rs/
environment.rs

1// crate import(s)
2use crate::impl_extra;
3
4// std import(s)
5use std::{collections::HashMap, default::Default};
6
7// other import(s)
8use serde::{Deserialize, Serialize};
9use serde_json::Value;
10
11/// Environment element for a CTRF report.
12/// Corresponds to the spec's ["Environment"](https://www.ctrf.io/docs/specification/environment) object.
13///
14/// All fields are optional.  Because they number so many, normally this would lead to a builder;
15/// however, in this case we just derive `Default` and let the end implementer access as needed.
16#[derive(Deserialize, Serialize, Default, Debug, PartialEq)]
17#[serde(rename_all = "camelCase")]
18pub struct Environment {
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub report_name: Option<String>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub app_name: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub app_version: Option<String>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub build_id: Option<String>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub build_name: Option<String>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub build_number: Option<usize>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub build_url: Option<String>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub repository_name: Option<String>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub repository_url: Option<String>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub commit: Option<String>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub branch_name: Option<String>,
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub os_platform: Option<String>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub os_release: Option<String>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub os_version: Option<String>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub test_environment: Option<String>,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub healthy: Option<bool>,
51    #[serde(default, skip_serializing_if = "HashMap::is_empty")]
52    extra: HashMap<String, Value>,
53}
54
55impl Environment {
56    /// Creates a default `Environment` instance
57    pub fn new() -> Self {
58        Self::default()
59    }
60}
61
62impl_extra!(Environment);