1use target_info::Target;
24
25pub fn platform() -> String {
27 let env = Target::env();
28 let env_dash = if env.is_empty() { "" } else { "-" };
29 format!("{}-{}{}{}", Target::arch(), Target::os(), env_dash, env)
30}
31
32pub fn version(crate_version: &str) -> String {
34 let sha3 = env!("VERGEN_GIT_SHA");
35 let sha3_dash = if sha3.is_empty() { "" } else { "-" };
36 let commit_date = env!("VERGEN_GIT_COMMIT_DATE").replace("-", "");
37 let date_dash = if commit_date.is_empty() { "" } else { "-" };
38 format!(
39 "conflux-rust/v{}{}{}{}{}/{}/rustc{}",
40 crate_version,
41 sha3_dash,
42 sha3,
43 date_dash,
44 commit_date,
45 platform(),
46 env!("VERGEN_RUSTC_SEMVER"),
47 )
48}
49
50#[macro_export]
51macro_rules! conflux_client_version {
52 () => {
53 parity_version::version(env!("CARGO_PKG_VERSION"))
54 };
55}
56
57#[cfg(test)]
58mod tests {
59 use crate::{platform, version};
60
61 use super::Target;
62
63 #[test]
64 fn test_platform() {
65 let platform = platform();
66
67 assert!(!platform.is_empty());
68 assert!(platform.contains(Target::arch()));
69 assert!(platform.contains(Target::os()));
70 }
71
72 #[test]
73 fn test_version() {
74 let test_version = "0.0.0";
75 let version_string = version(test_version);
76 println!("version_string: {}", version_string);
80 assert!(version_string
81 .starts_with(&format!("conflux-rust/v{}", test_version)));
82 assert!(version_string.contains(&platform().to_string()));
83
84 let sha = env!("VERGEN_GIT_SHA");
85
86 assert!(version_string.contains(&format!("-{}", sha)));
87 let commit_date = env!("VERGEN_GIT_COMMIT_DATE").replace("-", "");
88
89 assert_eq!(commit_date.len(), 8);
90 assert!(version_string.contains(&format!("-{}", commit_date)));
91
92 let rust_version = env!("VERGEN_RUSTC_SEMVER");
93 assert!(version_string.contains(&format!("/rustc{}", rust_version)));
94 }
95}