Documentation
use std::fs;
use std::io::{self, Error};

pub fn logical_count() -> io::Result<u64> {
    sysconf().or_else(|_| cpuinfo())
}

fn sysconf() -> io::Result<u64> {
    let result = unsafe { libc::sysconf(libc::_SC_NPROCESSORS_ONLN) };

    if result < 0 {
        Err(Error::last_os_error())
    } else {
        Ok(result as u64)
    }
}

fn cpuinfo() -> io::Result<u64> {
    let content = fs::read_to_string("/proc/cpuinfo")?;

    let num = content.lines().filter(|l| l.starts_with("processor")).count();

    Ok(num as u64)
}