1use std::error::Error;
2use std::process::Command;
3use thiserror::Error as TError;
4
5pub mod cpu;
6pub mod environment;
7pub mod gpu;
8pub mod host;
9pub mod memory;
10
11#[derive(Debug, TError, Clone)]
12pub enum HWError {
13 #[error("OS is not Linux")]
14 NotLinux,
15}
16
17pub fn is_linux() -> Result<bool, Box<dyn Error>> {
18 let mut uname = String::new();
19 match Command::new("uname").arg("-s").output() {
20 Ok(x) => x,
21 Err(_) => return Err(Box::new(HWError::NotLinux)),
22 }
23 .stdout
24 .iter()
25 .for_each(|b| uname.push(*b as char));
26
27 Ok(uname.replace("\n", "").trim() == "Linux")
28}
29
30pub trait InfoTrait {
31 fn get() -> Result<Self, Box<dyn Error>>
32 where
33 Self: Sized;
34}