libside 0.3.0

a library for building configuration management tools
Documentation
use std::io::{BufRead, BufReader, Read};

pub struct EtcUser {
    pub name: String,
    pub uid: u32,
    pub gid: u32,
    pub gecos: String,
    pub home: String,
    pub shell: String,
}

pub struct EtcGroup {
    pub name: String,
    pub gid: u32,
    pub users: Vec<String>,
}

pub(crate) fn parse_etc_passwd(reader: impl Read) -> Result<Vec<EtcUser>, std::io::Error> {
    BufReader::new(reader)
        .lines()
        .map(|v| {
            v.map(|line| {
                let mut parts = line.split(":");
                let name = parts.next().unwrap();
                parts.next().unwrap();
                let uid = parts.next().unwrap();
                let gid = parts.next().unwrap();
                let gecos = parts.next().unwrap();
                let home = parts.next().unwrap();
                let shell = parts.next().unwrap();

                EtcUser {
                    name: name.to_string(),
                    uid: uid.parse::<u32>().unwrap(),
                    gid: gid.parse::<u32>().unwrap(),
                    gecos: gecos.to_string(),
                    home: home.to_string(),
                    shell: shell.to_string(),
                }
            })
        })
        .collect()
}

pub(crate) fn parse_etc_group(reader: impl Read) -> Result<Vec<EtcGroup>, std::io::Error> {
    BufReader::new(reader)
        .lines()
        .map(|v| {
            v.map(|line| {
                let mut parts = line.split(":");
                let name = parts.next().unwrap();
                parts.next().unwrap();
                let gid = parts.next().unwrap();
                let users = parts
                    .next()
                    .unwrap()
                    .split(",")
                    .map(|v| v.to_string())
                    .collect();

                EtcGroup {
                    name: name.to_string(),
                    gid: gid.parse::<u32>().unwrap(),
                    users,
                }
            })
        })
        .collect()
}