45 lines
1.0 KiB
Rust
45 lines
1.0 KiB
Rust
//! Build identity helpers.
|
|
|
|
pub const BASE_VERSION: &str = env!("CARGO_PKG_VERSION");
|
|
|
|
pub fn channel() -> &'static str {
|
|
non_empty(option_env!("HERDR_BUILD_CHANNEL")).unwrap_or("stable")
|
|
}
|
|
|
|
pub fn build_id() -> Option<&'static str> {
|
|
non_empty(option_env!("HERDR_BUILD_ID"))
|
|
}
|
|
|
|
pub fn version() -> String {
|
|
match channel() {
|
|
"stable" => BASE_VERSION.to_string(),
|
|
channel => match build_id() {
|
|
Some(build_id) => format!("{BASE_VERSION}-{channel}.{build_id}"),
|
|
None => format!("{BASE_VERSION}-{channel}"),
|
|
},
|
|
}
|
|
}
|
|
|
|
pub fn is_preview() -> bool {
|
|
channel() == "preview"
|
|
}
|
|
|
|
fn non_empty(value: Option<&'static str>) -> Option<&'static str> {
|
|
value.and_then(|value| {
|
|
let trimmed = value.trim();
|
|
if trimmed.is_empty() {
|
|
None
|
|
} else {
|
|
Some(trimmed)
|
|
}
|
|
})
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
#[test]
|
|
fn stable_version_defaults_to_cargo_version() {
|
|
assert!(!super::version().is_empty());
|
|
}
|
|
}
|