1use std::fs;
2
3fn parse_str(sl: &str, prefix: &str) -> usize {
4 sl.strip_prefix(prefix)
5 .unwrap()
6 .strip_suffix("kB")
7 .unwrap()
8 .trim()
9 .parse::<usize>()
10 .unwrap()
11}
12
13#[derive(Default, Debug)]
14pub struct RamInfo {
15 pub mem_used: usize,
16 pub mem_free: usize,
17 pub mem_total: usize,
18 pub percent_free: f32,
19 pub percent_used: f32,
20}
21
22impl RamInfo {
23 fn fetch(&mut self) {
24 let rawdata = fs::read_to_string("/proc/meminfo").expect("error reading /proc/meminfo");
25
26 let mut data = rawdata.lines();
27
28 let memtotal = parse_str(data.nth(0).unwrap(), "MemTotal:");
29 let memfree = parse_str(data.nth(0).unwrap(), "MemFree:");
30
31 self.mem_free = memfree;
32 self.mem_total = memtotal;
33 self.mem_used = memtotal - memfree;
34
35 self.percent_used = (self.mem_used as f32 / self.mem_total as f32) * 100.;
36 self.percent_free = 100. - self.percent_used;
37 }
38
39 pub fn new() -> Self {
40 let mut r = RamInfo::default();
41 r.fetch();
42
43 r
44 }
45}