1use std::process::Command;
2
3use log::error;
4
5pub fn get() -> Option<String> {
6 Command::new("uname")
7 .arg("-m")
8 .output()
9 .map_err(|e| {
10 error!("Cannot invoke 'uname` to get architecture type: {:?}", e);
11 })
12 .ok()
13 .and_then(|out| {
14 if out.status.success() {
15 Some(String::from_utf8_lossy(&out.stdout).trim_end().to_owned())
16 } else {
17 log::error!("'uname' invocation error: {:?}", out);
18 None
19 }
20 })
21}
22
23#[cfg(test)]
24mod tests {
25 use super::*;
26
27 #[test]
28 fn uname_nonempty() {
29 let val = get().expect("architecture::get() failed");
30 assert!(!val.is_empty());
31 }
32}