sysfs-rs 0.0.12

rust lib for interacting with sysfs
Documentation
use std::io::prelude::*;
use std::fs::File;

pub fn usize_from_file(path: String) -> Result<usize, &'static str> {
    if let Ok(mut f) = File::open(&path) {
        let mut s = String::new();
        match f.read_to_string(&mut s) {
            Ok(_) => {
                match s.trim().parse() {
                    Ok(i) => Ok(i),
                    Err(_) => Err("unable to parse"),
                }
            }
            Err(_) => Err("unable to read file contents"),
        }
    } else {
        Err("unable to open file")
    }
}

pub fn bitmask_from_hex_file(file: String) -> Result<Vec<bool>, &'static str> {
    if let Ok(mut f) = File::open(&file) {
        let mut s = String::new();
        match f.read_to_string(&mut s) {
            Ok(_) => {
                s.trim();
                bitmask_from_hex(s)
            }
            Err(_) => Err("unable to read file contents"),
        }
    } else {
        Err("unable to open file")
    }
}

pub fn bitmask_from_hex(mask: String) -> Result<Vec<bool>, &'static str> {
    let mut bitmask = Vec::new();
    let chars = mask.trim().chars();
    for c in chars {
        match c {
            '0' => bitmask.extend_from_slice(&vec![false, false, false, false]),
            '1' => bitmask.extend_from_slice(&vec![false, false, false, true]),
            '2' => bitmask.extend_from_slice(&vec![false, false, true, false]),
            '3' => bitmask.extend_from_slice(&vec![false, false, true, true]),
            '4' => bitmask.extend_from_slice(&vec![false, true, false, false]),
            '5' => bitmask.extend_from_slice(&vec![false, true, false, true]),
            '6' => bitmask.extend_from_slice(&vec![false, true, true, false]),
            '7' => bitmask.extend_from_slice(&vec![false, true, true, true]),
            '8' => bitmask.extend_from_slice(&vec![true, false, false, false]),
            '9' => bitmask.extend_from_slice(&vec![true, false, false, true]),
            'a' | 'A' => bitmask.extend_from_slice(&vec![true, false, true, false]),
            'b' | 'B' => bitmask.extend_from_slice(&vec![true, false, true, true]),
            'c' | 'C' => bitmask.extend_from_slice(&vec![true, true, false, false]),
            'd' | 'D' => bitmask.extend_from_slice(&vec![true, true, false, true]),
            'e' | 'E' => bitmask.extend_from_slice(&vec![true, true, true, false]),
            'f' | 'F' => bitmask.extend_from_slice(&vec![true, true, true, true]),
            ',' => {}
            _ => {
                return Err("unexpected character in mask");
            }
        }
    }
    bitmask.reverse();
    Ok(bitmask)
}