netaddr2/netaddr/
broadcast.rs1use 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}