pub fn current_platform() -> &'static str {
match (std::env::consts::OS, std::env::consts::ARCH) {
("macos", "aarch64") => "darwin-aarch64",
("macos", "x86_64") => "darwin-x86_64",
("linux", "aarch64") => "linux-aarch64",
("linux", "x86_64") => "linux-x86_64",
_ => "unknown",
}
}
#[cfg(test)]
mod tests {
#[test]
fn known_platforms_all_have_canonical_strings() {
let cases = [
("macos", "aarch64", "darwin-aarch64"),
("macos", "x86_64", "darwin-x86_64"),
("linux", "aarch64", "linux-aarch64"),
("linux", "x86_64", "linux-x86_64"),
];
for (os, arch, expected) in cases {
let result = map_platform(os, arch);
assert_eq!(result, expected, "os={os} arch={arch}");
}
}
#[test]
fn unknown_os_arch_returns_unknown() {
assert_eq!(map_platform("windows", "x86_64"), "unknown");
assert_eq!(map_platform("freebsd", "aarch64"), "unknown");
assert_eq!(map_platform("", ""), "unknown");
}
fn map_platform(os: &str, arch: &str) -> &'static str {
match (os, arch) {
("macos", "aarch64") => "darwin-aarch64",
("macos", "x86_64") => "darwin-x86_64",
("linux", "aarch64") => "linux-aarch64",
("linux", "x86_64") => "linux-x86_64",
_ => "unknown",
}
}
}