#[macro_export]
macro_rules! get_version {
() => {{
use std::sync::OnceLock;
static VERSION: OnceLock<&'static str> = OnceLock::new();
*VERSION.get_or_init(|| {
if let Some(version) = option_env!("THRU_BUILD_VERSION") {
return version;
}
let base = env!("CARGO_PKG_VERSION");
let sha = option_env!("VERGEN_GIT_SHA").unwrap_or("unknown");
let sha_short = if sha.len() > 8 { &sha[..8] } else { sha };
let dirty = option_env!("VERGEN_GIT_DIRTY") == Some("true");
let describe = option_env!("VERGEN_GIT_DESCRIBE").unwrap_or("");
let release_tag = format!("v{}", base);
let inferred_release = !dirty && (describe == base || describe == release_tag);
let release = match option_env!("THRU_BUILD_CHANNEL") {
Some("release") => true,
Some("local") => false,
_ => inferred_release,
};
let local_suffix = if release { "" } else { "-local" };
let dirty_suffix = if dirty { ".dirty" } else { "" };
let version = format!("{}{}+{}{}", base, local_suffix, sha_short, dirty_suffix);
Box::leak(version.into_boxed_str())
})
}};
}