pub const PKG_VERSION: &str = env!("CARGO_PKG_VERSION");
pub const COMMIT_HASH: &str = env!("WT_COMMIT_HASH");
pub const COMMIT_DATE: &str = env!("WT_COMMIT_DATE");
pub const BUILD_PROFILE: &str = env!("WT_BUILD_PROFILE");
pub const RUSTC_VERSION: &str = env!("WT_RUSTC_VERSION");
pub const BUILD_TIMESTAMP: &str = env!("WT_BUILD_TIMESTAMP");
pub fn long_version() -> &'static str {
static VERSION: std::sync::OnceLock<String> = std::sync::OnceLock::new();
VERSION
.get_or_init(|| {
format_version(
PKG_VERSION,
COMMIT_HASH,
COMMIT_DATE,
BUILD_PROFILE,
RUSTC_VERSION,
BUILD_TIMESTAMP,
)
})
.as_str()
}
fn format_version(
version: &str,
commit: &str,
commit_date: &str,
profile: &str,
rustc: &str,
built: &str,
) -> String {
format!(
"{version}\n\
commit: {commit} ({commit_date})\n\
profile: {profile}\n\
rustc: {rustc}\n\
built: {built}"
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn format_version_lays_out_all_facts() {
let out = format_version(
"1.2.3",
"abc123",
"2026-01-01T00:00:00Z",
"release",
"rustc 1.96.0",
"2026-06-08T12:00:00Z",
);
assert_eq!(
out,
"1.2.3\n\
commit: abc123 (2026-01-01T00:00:00Z)\n\
profile: release\n\
rustc: rustc 1.96.0\n\
built: 2026-06-08T12:00:00Z"
);
}
#[test]
fn long_version_starts_with_semver_and_includes_build_facts() {
let out = long_version();
assert!(out.starts_with(PKG_VERSION));
assert!(out.contains("commit:"));
assert!(out.contains("profile:"));
assert!(out.contains("rustc:"));
assert!(out.contains("built:"));
}
#[test]
fn constants_are_populated() {
assert!(!COMMIT_HASH.is_empty());
assert!(!COMMIT_DATE.is_empty());
assert!(!BUILD_PROFILE.is_empty());
assert!(!RUSTC_VERSION.is_empty());
assert!(!BUILD_TIMESTAMP.is_empty());
}
}