proclist 0.9.2

Cross-platform library to retrieve OS processes information.
Documentation
use std::fs;
use types::*;

/// Iterate through processes information.
pub fn iterate_processes_info() -> impl Iterator<Item = Result<ProcessInfo, Error>> {
    fs::read_dir("/proc/")
        .expect("Can't read /proc/")
        .filter_map(|entry| {
            let pid = entry.ok()?.file_name().to_str()?.parse::<u32>().ok()?;
            let path = format!("/proc/{}/stat", pid);
            let stat = match fs::read_to_string(&path) {
                Result::Ok(stat) => stat,
                Result::Err(err) => {
                    let description = format!("Can't read {}", path);
                    let internal_err = Error::internal_with_cause(description, &err);
                    return Option::Some(Result::Err(internal_err));
                }
            };
            let mut parts_iter = stat.split_whitespace();
            let name = parts_iter.nth(1)?;
            let parent_pid = parts_iter.nth(1)?.parse::<u32>().ok()?;
            let threads_count = parts_iter.nth(15)?.parse::<u32>().ok()?;
            Option::Some(Result::Ok(ProcessInfo {
                name: String::from(&name[1..name.len() - 1]),
                pid,
                parent_pid,
                threads_count,
            }))
        })
}