hw_linux/environment/
mod.rs1use 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}