push-packet 0.1.0

Packet-inspection and routing library for Linux, built on eBPF XDP and AF_XDP with aya.
Documentation
use std::ops::{Range, RangeInclusive};

pub trait IntoPortRange {
    fn into_port_range(self) -> RangeInclusive<u16>;
}
impl IntoPortRange for u16 {
    fn into_port_range(self) -> RangeInclusive<u16> {
        self..=self
    }
}
impl IntoPortRange for RangeInclusive<u16> {
    fn into_port_range(self) -> RangeInclusive<u16> {
        self
    }
}
impl IntoPortRange for Range<u16> {
    fn into_port_range(self) -> RangeInclusive<u16> {
        self.start..=self.end - 1
    }
}

#[cfg(test)]
mod tests {
    use std::ops::RangeInclusive;

    use crate::rules::port::IntoPortRange;

    fn converter(value: impl IntoPortRange) -> RangeInclusive<u16> {
        value.into_port_range()
    }

    #[test]
    fn single_port() {
        let test = converter(20);
        let control = 20..=20;
        assert_eq!(test, control);
    }

    #[test]
    fn test_range_inclusive() {
        let test = converter(0..=20);
        let control = 0..=20;
        assert_eq!(test, control);
    }

    #[test]
    fn test_range() {
        let test = converter(0..20);
        let control = 0..=19;
        assert_eq!(test, control);
    }
}