use anyhow::{anyhow, Result};

pub mod core;
pub mod handle;
pub mod netlink;
pub mod types;

const RTA_MTU: u16 = 0x2;
const RTA_VIA: u16 = 18;

pub fn align_of(len: usize, align_to: usize) -> usize {
    (len + align_to - 1) & !(align_to - 1)
}

pub fn parse_mac(mac: &str) -> Result<Vec<u8>> {
    let mac = mac
        .split(':')
        .map(|s| u8::from_str_radix(s, 16))
        .collect::<Result<Vec<u8>, _>>()?;

    if mac.len() != 6 {
        return Err(anyhow!("Invalid MAC address"));
    }

    Ok(mac)
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn it_works() {
        assert_eq!(align_of(0x10, 0x4), 0x10);
    }
}
