From 1b74cfda59db02ccbe7d3ec78b2864e190c8bce5 Mon Sep 17 00:00:00 2001 From: Abhishek Chanda Date: Tue, 11 Aug 2015 17:00:45 -0700 Subject: [PATCH] Implement a contains() method This returns true if a given IP belongs to a subnet --- src/lib.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 65bff80..0c0ac39 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -49,6 +49,11 @@ impl Ipv4Network { pub fn network(&self) -> (Ipv4Addr, u32) { return (self.addr, u32::from(self.addr)); } + + pub fn contains(&self, ip: Ipv4Addr) -> bool { + let (_, net) = self.network(); + return ((u32::from(ip) & net) == net) + } } impl Ipv6Network { @@ -132,4 +137,11 @@ mod test { assert_eq!(ip, Ipv4Addr::new(74, 125, 227, 0)); assert_eq!(int, 1249764096); } + + #[test] + fn contains_v4() { + let cidr = Ipv4Network::new(Ipv4Addr::new(74, 125, 227, 0), 25); + let ip = Ipv4Addr::new(74,125,227,4); + assert!(cidr.contains(ip)); + } }