#[cfg(target_os = "android")]
pub const OS: &str = "Android";
#[cfg(target_os = "ios")]
pub const OS: &str = "iOS";
#[cfg(target_os = "linux")]
pub const OS: &str = "Linux";
#[cfg(target_os = "macos")]
pub const OS: &str = "Darwin";
#[cfg(target_os = "windows")]
pub const OS: &str = "Windows";
#[cfg(target_os = "freebsd")]
pub const OS: &str = "FreeBSD";
#[cfg(target_os = "netbsd")]
pub const OS: &str = "NetBSD";
#[cfg(target_os = "openbsd")]
pub const OS: &str = "OpenBSD";
#[cfg(target_os = "solaris")]
pub const OS: &str = "Solaris";
#[cfg(not(any(
target_os = "android",
target_os = "ios",
target_os = "linux",
target_os = "macos",
target_os = "windows",
target_os = "freebsd",
target_os = "netbsd",
target_os = "openbsd",
target_os = "solaris",
)))]
pub const OS: &str = "Unknown";
#[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 = "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");
}