rsys 0.5.5

Crate for system and hardware information parsing
Documentation
use super::Error;
use std::any::type_name;

pub fn trim_parse_map<T>(inp: &str) -> Result<T, Error>
where
    T: std::str::FromStr,
    T::Err: std::fmt::Display,
{
    inp.trim().parse::<T>().map_err(|e| {
        Error::InvalidInputError(
            inp.to_string(),
            format!("cannot parse as '{}' - '{}'", type_name::<T>(), e),
        )
    })
}

pub fn next<'l, T, I>(iter: &mut I, src: &str) -> Result<T, Error>
where
    T: std::str::FromStr,
    T::Err: std::fmt::Display,
    I: Iterator<Item = &'l str>,
{
    if let Some(s) = iter.next() {
        return trim_parse_map(s);
    }

    Err(Error::InvalidInputError(
        src.to_string(),
        format!("there was no element of type {}", type_name::<T>()),
    ))
}
pub fn skip<I, T>(n: usize, iter: &mut I) -> &mut I
where
    I: Iterator<Item = T>,
{
    for _ in 0..n {
        iter.next();
    }
    iter
}