Skip to main content

gitversion_rs/output/
variables.rs

1//! The final computed GitVersion output variables.
2//!
3//! Maps 1:1 to the original `GitVersion.Output/Serializer/VersionVariablesJsonModel.cs`.
4
5use serde::{Deserialize, Serialize};
6use std::collections::BTreeMap;
7
8/// All output variables computed by GitVersion.
9///
10/// JSON output uses the same key names as the original (PascalCase).
11#[derive(Debug, Clone, Default, Serialize, Deserialize)]
12#[serde(rename_all = "PascalCase", default)]
13pub struct VersionVariables {
14    pub major: u32,
15    pub minor: u32,
16    pub patch: u32,
17
18    pub pre_release_tag: String,
19    pub pre_release_tag_with_dash: String,
20    pub pre_release_label: String,
21    pub pre_release_label_with_dash: String,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub pre_release_number: Option<i64>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub weighted_pre_release_number: Option<i64>,
26
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub build_meta_data: Option<i64>,
29    pub full_build_meta_data: String,
30
31    pub major_minor_patch: String,
32    pub sem_ver: String,
33    pub full_sem_ver: String,
34
35    pub assembly_sem_ver: String,
36    pub assembly_sem_file_ver: String,
37    pub informational_version: String,
38
39    pub branch_name: String,
40    pub escaped_branch_name: String,
41    pub sha: String,
42    pub short_sha: String,
43
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub version_source_distance: Option<i64>,
46    pub version_source_increment: String,
47    pub version_source_sem_ver: String,
48    pub version_source_sha: String,
49    /// Deprecated: prefer `VersionSourceDistance`. Retained for compatibility.
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub commits_since_version_source: Option<i64>,
52
53    pub commit_date: String,
54    pub uncommitted_changes: i64,
55}
56
57impl VersionVariables {
58    /// Variable name to string-value map. Used by `-showvariable` and environment-variable output.
59    pub fn to_map(&self) -> BTreeMap<String, String> {
60        let mut m = BTreeMap::new();
61        let opt = |o: Option<i64>| o.map(|v| v.to_string()).unwrap_or_default();
62        m.insert("Major".into(), self.major.to_string());
63        m.insert("Minor".into(), self.minor.to_string());
64        m.insert("Patch".into(), self.patch.to_string());
65        m.insert("PreReleaseTag".into(), self.pre_release_tag.clone());
66        m.insert(
67            "PreReleaseTagWithDash".into(),
68            self.pre_release_tag_with_dash.clone(),
69        );
70        m.insert("PreReleaseLabel".into(), self.pre_release_label.clone());
71        m.insert(
72            "PreReleaseLabelWithDash".into(),
73            self.pre_release_label_with_dash.clone(),
74        );
75        m.insert("PreReleaseNumber".into(), opt(self.pre_release_number));
76        m.insert(
77            "WeightedPreReleaseNumber".into(),
78            opt(self.weighted_pre_release_number),
79        );
80        m.insert("BuildMetaData".into(), opt(self.build_meta_data));
81        m.insert(
82            "FullBuildMetaData".into(),
83            self.full_build_meta_data.clone(),
84        );
85        m.insert("MajorMinorPatch".into(), self.major_minor_patch.clone());
86        m.insert("SemVer".into(), self.sem_ver.clone());
87        m.insert("FullSemVer".into(), self.full_sem_ver.clone());
88        m.insert("AssemblySemVer".into(), self.assembly_sem_ver.clone());
89        m.insert(
90            "AssemblySemFileVer".into(),
91            self.assembly_sem_file_ver.clone(),
92        );
93        m.insert(
94            "InformationalVersion".into(),
95            self.informational_version.clone(),
96        );
97        m.insert("BranchName".into(), self.branch_name.clone());
98        m.insert("EscapedBranchName".into(), self.escaped_branch_name.clone());
99        m.insert("Sha".into(), self.sha.clone());
100        m.insert("ShortSha".into(), self.short_sha.clone());
101        m.insert(
102            "VersionSourceDistance".into(),
103            opt(self.version_source_distance),
104        );
105        m.insert(
106            "VersionSourceIncrement".into(),
107            self.version_source_increment.clone(),
108        );
109        m.insert(
110            "VersionSourceSemVer".into(),
111            self.version_source_sem_ver.clone(),
112        );
113        m.insert("VersionSourceSha".into(), self.version_source_sha.clone());
114        m.insert(
115            "CommitsSinceVersionSource".into(),
116            opt(self.commits_since_version_source),
117        );
118        m.insert("CommitDate".into(), self.commit_date.clone());
119        m.insert(
120            "UncommittedChanges".into(),
121            self.uncommitted_changes.to_string(),
122        );
123        m
124    }
125}