netaddr2/traits/mask/
ipv6addr.rs1use 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}