#[cfg(target_arch = "aarch64")]
pub const ARCH: &str = "aarch64";
#[cfg(target_arch = "arm")]
pub const ARCH: &str = "arm";
#[cfg(target_arch = "x86")]
pub const ARCH: &str = "x86";
#[cfg(target_arch = "x86_64")]
pub const ARCH: &str = "x86_64";
#[cfg(not(any(
target_arch = "aarch64",
target_arch = "arm",
target_arch = "x86",
target_arch = "x86_64"
)))]
pub const ARCH: &str = "Unknown";
#[cfg(any(target_os = "macos", target_os = "windows"))]
pub fn get_os_version() -> String {
whatsys::kernel_version().unwrap_or_else(|| "Unknown".to_owned())
}
#[cfg(not(any(target_os = "linux", target_os = "macos", target_os = "windows")))]
pub fn get_os_version() -> String {
"Unknown".to_owned()
}
#[cfg(target_os = "linux")]
pub fn get_os_version() -> String {
parse_linux_os_string(whatsys::kernel_version().unwrap_or_else(|| "Unknown".to_owned()))
}
#[cfg(target_os = "windows")]
pub fn get_windows_build_number() -> Option<i64> {
match whatsys::windows_build_number() {
Some(i) => Some(i as i64),
_ => None,
}
}
#[cfg(not(target_os = "windows"))]
pub fn get_windows_build_number() -> Option<i64> {
None
}
#[cfg(target_os = "linux")]
fn parse_linux_os_string(os_str: String) -> String {
os_str.split('.').take(2).collect::<Vec<&str>>().join(".")
}
#[test]
#[cfg(target_os = "linux")]
fn parse_fixed_linux_os_string() {
let alpine_os_string = "4.12.0-rc6-g48ec1f0-dirty".to_owned();
assert_eq!(parse_linux_os_string(alpine_os_string), "4.12");
let centos_os_string = "3.10.0-514.16.1.el7.x86_64".to_owned();
assert_eq!(parse_linux_os_string(centos_os_string), "3.10");
let ubuntu_os_string = "5.8.0-44-generic".to_owned();
assert_eq!(parse_linux_os_string(ubuntu_os_string), "5.8");
}