proc_getter 0.0.3

make retriving infomations from /proc/* easier
Documentation
use crate::{Error, Result};
use std::str::FromStr;

pub struct Statm {
    total: usize,
    portions: usize,
    shared: usize,
    code: usize,
    data: usize,
    library: usize,
    dirty: usize,
}

impl Statm {
    getter_gen! {
        total: usize,
        portions: usize,
        shared: usize,
        code: usize,
        data: usize,
        library: usize,
        dirty: usize
    }
}

impl FromStr for Statm {
    type Err = Error;

    fn from_str(line: &str) -> Result<Self> {
        let columns: Vec<&str> = line.split_ascii_whitespace().collect();
        if columns.len() != 7 {
            return Err(Error::BadFormat);
        }

        let total = columns[0].parse::<usize>()?;
        let portions = columns[1].parse::<usize>()?;
        let shared = columns[2].parse::<usize>()?;
        let code = columns[3].parse::<usize>()?;
        let data = columns[4].parse::<usize>()?;
        let library = columns[5].parse::<usize>()?;
        let dirty = columns[6].parse::<usize>()?;

        Ok(Statm {
            total,
            portions,
            shared,
            code,
            data,
            library,
            dirty,
        })
    }
}

pub fn statm_of(pid: u32) -> Result<Statm> {
    let content = std::fs::read_to_string(pid_path!(pid, "statm"))?;
    Statm::from_str(content.trim())
}