netaddr2/netaddr/
broadcast.rs

1use super::NetAddr;
2use crate::traits::Broadcast;
3use std::net::IpAddr;
4
5impl Broadcast for NetAddr {
6	type Output = Option<IpAddr>;
7
8	fn broadcast(&self) -> Self::Output {
9		match self {
10			Self::V4(netaddr) => Some(IpAddr::from(netaddr.broadcast())),
11			_ => None,
12		}
13	}
14}
15
16#[cfg(test)]
17mod tests {
18	use super::*;
19	use crate::NetAddr;
20	use std::net::IpAddr;
21
22	mod v4 {
23		use super::*;
24		use std::net::Ipv4Addr;
25
26		#[test]
27		fn returns_correct_address() {
28			let net: NetAddr = "127.0.0.1/8".parse().unwrap();
29			assert_eq!(
30				net.broadcast().unwrap(),
31				IpAddr::V4(Ipv4Addr::new(127, 255, 255, 255))
32			);
33
34			let net: NetAddr = "192.168.69.25/29".parse().unwrap();
35			assert_eq!(
36				net.broadcast().unwrap(),
37				IpAddr::V4(Ipv4Addr::new(192, 168, 69, 31))
38			);
39
40			let net: NetAddr = "192.168.128.127/32".parse().unwrap();
41			assert_eq!(
42				net.broadcast().unwrap(),
43				IpAddr::V4(Ipv4Addr::new(192, 168, 128, 127))
44			);
45		}
46	}
47
48	mod v6 {
49		use super::*;
50
51		#[test]
52		fn returns_none() {
53			let net: NetAddr = "fe80::1/64".parse().unwrap();
54			assert_eq!(net.broadcast(), None);
55		}
56	}
57}