auto_cpufreq/
tlp_stat_parser.rs1use 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}