controlgroup 0.3.0

Native Rust crate for cgroup operations
Documentation
macro_rules! with_doc {
    ($doc: expr, $( $tt: tt )*) => {
        #[doc = $doc]
        $( $tt )*
    };
}

macro_rules! subsys_file {
    ($subsystem: ident, $field: ident) => {
        concat!(stringify!($subsystem), ".", stringify!($field))
    };
    ($subsystem: literal, $field: ident) => {
        concat!($subsystem, ".", stringify!($field))
    };
}

macro_rules! bail_parse {
    () => {
        return Err(crate::Error::new(crate::ErrorKind::Parse));
    };
}

#[cfg(test)]
macro_rules! gen_cgroup_name {
    () => {
        std::path::PathBuf::from(format!(
            "controlgroup_rs-{}-{}",
            std::path::Path::new(file!())
                .file_stem()
                .and_then(std::ffi::OsStr::to_str)
                .unwrap(),
            line!()
        ))
    };
}

#[cfg(test)]
macro_rules! hashmap {
    ( $( ( $k: expr, $v: expr $(, )? ) ),* $(, )? ) => { {
        #[allow(unused_mut, clippy::let_and_return)]

        let mut hashmap = std::collections::HashMap::new();
        $( hashmap.insert($k, $v); )*
        hashmap
    } };
}

#[cfg(test)]
mod tests {
    #[test]
    fn test_subsys_file() {
        assert_eq!(subsys_file!(cgroup, procs), "cgroup.procs");
    }

    #[test]
    fn test_gen_cgroup_name() {
        assert_eq!(
            gen_cgroup_name!(),
            std::path::PathBuf::from("controlgroup_rs-macros-58")
        );
    }

    #[test]
    fn test_hashmap() {
        assert_eq!(
            hashmap! { (0, "zero"), (1, "one") },
            [(0, "zero"), (1, "one")]
                .iter()
                .copied()
                .collect::<std::collections::HashMap<_, _>>()
        );
    }
}