sysfs_rs/
util.rs

1use std::io::prelude::*;
2use std::fs::File;
3
4pub fn usize_from_file(path: String) -> Result<usize, &'static str> {
5    if let Ok(mut f) = File::open(&path) {
6        let mut s = String::new();
7        match f.read_to_string(&mut s) {
8            Ok(_) => {
9                match s.trim().parse() {
10                    Ok(i) => Ok(i),
11                    Err(_) => Err("unable to parse"),
12                }
13            }
14            Err(_) => Err("unable to read file contents"),
15        }
16    } else {
17        Err("unable to open file")
18    }
19}
20
21pub fn bitmask_from_hex_file(file: String) -> Result<Vec<bool>, &'static str> {
22    if let Ok(mut f) = File::open(&file) {
23        let mut s = String::new();
24        match f.read_to_string(&mut s) {
25            Ok(_) => {
26                s.trim();
27                bitmask_from_hex(s)
28            }
29            Err(_) => Err("unable to read file contents"),
30        }
31    } else {
32        Err("unable to open file")
33    }
34}
35
36pub fn bitmask_from_hex(mask: String) -> Result<Vec<bool>, &'static str> {
37    let mut bitmask = Vec::new();
38    let chars = mask.trim().chars();
39    for c in chars {
40        match c {
41            '0' => bitmask.extend_from_slice(&vec![false, false, false, false]),
42            '1' => bitmask.extend_from_slice(&vec![false, false, false, true]),
43            '2' => bitmask.extend_from_slice(&vec![false, false, true, false]),
44            '3' => bitmask.extend_from_slice(&vec![false, false, true, true]),
45            '4' => bitmask.extend_from_slice(&vec![false, true, false, false]),
46            '5' => bitmask.extend_from_slice(&vec![false, true, false, true]),
47            '6' => bitmask.extend_from_slice(&vec![false, true, true, false]),
48            '7' => bitmask.extend_from_slice(&vec![false, true, true, true]),
49            '8' => bitmask.extend_from_slice(&vec![true, false, false, false]),
50            '9' => bitmask.extend_from_slice(&vec![true, false, false, true]),
51            'a' | 'A' => bitmask.extend_from_slice(&vec![true, false, true, false]),
52            'b' | 'B' => bitmask.extend_from_slice(&vec![true, false, true, true]),
53            'c' | 'C' => bitmask.extend_from_slice(&vec![true, true, false, false]),
54            'd' | 'D' => bitmask.extend_from_slice(&vec![true, true, false, true]),
55            'e' | 'E' => bitmask.extend_from_slice(&vec![true, true, true, false]),
56            'f' | 'F' => bitmask.extend_from_slice(&vec![true, true, true, true]),
57            ',' => {}
58            _ => {
59                return Err("unexpected character in mask");
60            }
61        }
62    }
63    bitmask.reverse();
64    Ok(bitmask)
65}