1#[derive(Clone, Debug)]
2pub struct Version {
3 pub pkg_name: &'static str,
4 pub pkg_version: &'static str,
5 pub pkg_repo: &'static str,
6 pub crate_name: &'static str,
7 pub commit_hash: &'static str,
8 pub long_version: &'static str,
9 pub target: &'static str,
10 pub app_crates: Vec<String>,
11}
12
13#[macro_export]
14macro_rules! version {
15 ($($c:ident),* ) => {
16 $crate::Version {
17 pkg_name: env!("CARGO_PKG_NAME"),
18 pkg_version: env!("CARGO_PKG_VERSION"),
19 pkg_repo: env!("CARGO_PKG_REPOSITORY"),
20 crate_name: env!("CARGO_CRATE_NAME"),
21 commit_hash: env!("COMMIT_SHA"),
22 target: env!("TARGET"),
23 long_version: concat!(
24 env!("CARGO_PKG_VERSION"),
25 "\n",
26 env!("COMMIT_SHA"),
27 " ",
28 env!("COMMIT_DATE"),
29 "\n",
30 env!("TARGET"),
31 " ",
32 env!("BUILD_DATE"),
33 "\n",
34 env!("CARGO_PKG_AUTHORS"),
35 "\n",
36 env!("CARGO_PKG_HOMEPAGE"),
37 "\n",
38 env!("CARGO_PKG_DESCRIPTION"),
39 ),
40 app_crates: vec![
41 env!("CARGO_PKG_NAME").replace('-', "_"),
42 env!("CARGO_CRATE_NAME").replace('-', "_"),
43 "cli_batteries".to_owned(),
44 $(
45 stringify!($c).to_string(),
46 )*
47 ],
48 }
49 };
50}