hw_linux/environment/
mod.rs

1use std::fs;
2use std::process::Command;
3use crate::{is_linux, InfoTrait};
4use std::error::Error;
5
6pub mod packages;
7
8#[derive(Default, Clone, Debug)]
9pub struct EnvironmentInfo{
10    pub user : Option<String>,
11    pub shell : Option<String>,
12    pub term : Option<String>,
13}
14
15#[derive(Default, Clone, Debug)]
16pub struct KernelInfo{
17    pub version : Option<String>,
18    pub release : Option<String>,
19}
20
21#[derive(Default, Clone, Debug)]
22pub struct UptimeInfo(pub Option<f64>);
23
24impl InfoTrait for EnvironmentInfo{
25    fn get() -> Result<Self, Box<dyn Error>>{
26        let _ = is_linux()?;
27        Ok(Self{
28            user : Some(std::env::var("USER")?.trim().to_string()),
29            shell : Some(std::env::var("SHELL")?.trim().to_string()),
30            term : Some(std::env::var("TERM")?.trim().to_string()),
31        })
32    }
33}
34
35impl InfoTrait for KernelInfo{
36    fn get() -> Result<Self, Box<dyn Error>>{
37        let _ = is_linux()?;
38        let mut kernel = KernelInfo::default();
39        let release = Some(match fs::read_to_string("/proc/sys/kernel/osrelease"){
40            Ok(x) => x.trim().to_string(),
41            Err(_) => {
42                let command = Command::new("uname")
43                    .arg("-r")
44                    .output()?;
45                let output = std::str::from_utf8(&command.stdout).unwrap();
46                output.trim().to_string()
47            }
48        });
49        kernel.release = release.clone();
50        kernel.version = Some(release.unwrap().split(".").collect::<Vec<&str>>()[0].to_string());
51        Ok(kernel)
52    }
53}
54
55impl InfoTrait for UptimeInfo{
56    fn get() -> Result<Self, Box<dyn Error>>{
57        let _ = is_linux()?;
58        let mut uptime = Self::default();
59        uptime.0 = Some(fs::read_to_string("/proc/uptime")?.split_whitespace().collect::<Vec<&str>>()[0].parse::<f64>()?);
60        Ok(uptime)
61    }
62}