use std::{fmt::Display, sync::OnceLock};
static VERSION_INFO_PKG: OnceLock<VersionInfo> = OnceLock::new();
static VERSION_INFO_SYS: OnceLock<VersionInfo> = OnceLock::new();
pub struct VersionInfo {
pub major: u16,
pub minor: u16,
pub patch: u16,
}
pub fn get_version() -> (&'static VersionInfo, &'static VersionInfo) {
(
VERSION_INFO_PKG.get_or_init(|| parse_version(env!("CARGO_PKG_VERSION", "Package version not defined!"))),
VERSION_INFO_SYS.get_or_init(|| parse_version(crate::fapi_sys::TSS2_FAPI_VERSION)),
)
}
fn parse_version(version_string: &str) -> VersionInfo {
let mut tokens = version_string.split('.').map(|str| str.parse::<u16>().unwrap_or_default());
VersionInfo { major: tokens.next().unwrap_or_default(), minor: tokens.next().unwrap_or_default(), patch: tokens.next().unwrap_or_default() }
}
impl Display for VersionInfo {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}.{}.{}", self.major, self.minor, self.patch)
}
}