Skip to main content

auto_cpufreq/
tlp_stat_parser.rs

1// src/tlp_stat_parser.rs
2
3use std::collections::HashMap;
4
5pub struct TLPStatusParser {
6    data: HashMap<String, String>,
7}
8
9impl TLPStatusParser {
10    pub fn new(tlp_stat_output: &str) -> Self {
11        let mut parser = Self {
12            data: HashMap::new(),
13        };
14        parser.parse(tlp_stat_output);
15        parser
16    }
17
18    fn parse(&mut self, data: &str) {
19        for line in data.lines() {
20            if let Some((key, val)) = line.split_once('=') {
21                self.data
22                    .insert(key.trim().to_lowercase(), val.trim().to_string());
23            }
24        }
25    }
26
27    fn get_key(&self, key: &str) -> String {
28        self.data.get(key).cloned().unwrap_or_default()
29    }
30
31    pub fn is_enabled(&self) -> bool {
32        self.get_key("state") == "enabled"
33    }
34}
35
36#[cfg(test)]
37mod tests {
38    use super::*;
39
40    #[test]
41    fn test_tlp_parser() {
42        let output = "state=enabled\nversion=1.3.1\nmode=battery";
43        let parser = TLPStatusParser::new(output);
44
45        assert!(parser.is_enabled());
46        assert_eq!(parser.get_key("version"), "1.3.1");
47        assert_eq!(parser.get_key("mode"), "battery");
48    }
49
50    #[test]
51    fn test_tlp_parser_disabled() {
52        let output = "state=disabled";
53        let parser = TLPStatusParser::new(output);
54
55        assert!(!parser.is_enabled());
56    }
57
58    #[test]
59    fn test_tlp_parser_empty() {
60        let parser = TLPStatusParser::new("");
61        assert!(!parser.is_enabled());
62    }
63}