netaddr2/traits/mask/
ipv6addr.rs

1use super::Mask;
2use std::net::Ipv6Addr;
3
4impl Mask for Ipv6Addr {
5	type Output = Self;
6
7	fn mask(&self, other: &Self) -> Self::Output {
8		Self::Output::from((u128::from(*self)) & (u128::from(*other)))
9	}
10}
11
12#[cfg(test)]
13mod tests {
14	use super::*;
15
16	#[test]
17	fn returns_correct_answer() {
18		let a: Ipv6Addr = "2001:db8::dead:beef".parse().unwrap();
19		let b: Ipv6Addr = "ffff:ffff::".parse().unwrap();
20
21		assert_eq!(a.mask(&b), "2001:db8::".parse::<Ipv6Addr>().unwrap());
22	}
23
24	#[test]
25	fn is_reflexive() {
26		let a: Ipv6Addr = "2001:db8::dead:beef".parse().unwrap();
27		let b: Ipv6Addr = "ffff:ffff::".parse().unwrap();
28
29		assert_eq!(a.mask(&b), b.mask(&a));
30	}
31}