From e0e179de8ceef2e2e3a1d88ac8f2632148a22104 Mon Sep 17 00:00:00 2001 From: Markus Pettersson Date: Wed, 8 Jan 2025 09:26:23 +0100 Subject: [PATCH] Make `IpNetwork::broadcast` const --- src/ipv4.rs | 8 ++++---- src/ipv6.rs | 8 ++++---- src/lib.rs | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/ipv4.rs b/src/ipv4.rs index 5906ef0..e0e75f0 100644 --- a/src/ipv4.rs +++ b/src/ipv4.rs @@ -219,10 +219,10 @@ impl Ipv4Network { /// let net: Ipv4Network = "10.9.0.32/16".parse().unwrap(); /// assert_eq!(net.broadcast(), Ipv4Addr::new(10, 9, 255, 255)); /// ``` - pub fn broadcast(&self) -> Ipv4Addr { - let mask = u32::from(self.mask()); - let broadcast = u32::from(self.addr) | !mask; - Ipv4Addr::from(broadcast) + pub const fn broadcast(&self) -> Ipv4Addr { + let mask = self.mask().to_bits(); + let broadcast = self.addr.to_bits() | !mask; + Ipv4Addr::from_bits(broadcast) } /// Checks if a given `Ipv4Addr` is in this `Ipv4Network` diff --git a/src/ipv6.rs b/src/ipv6.rs index 2767471..f54f164 100644 --- a/src/ipv6.rs +++ b/src/ipv6.rs @@ -240,10 +240,10 @@ impl Ipv6Network { /// let net: Ipv6Network = "2001:db8::/96".parse().unwrap(); /// assert_eq!(net.broadcast(), Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0xffff, 0xffff)); /// ``` - pub fn broadcast(&self) -> Ipv6Addr { - let mask = u128::from(self.mask()); - let broadcast = u128::from(self.addr) | !mask; - Ipv6Addr::from(broadcast) + pub const fn broadcast(&self) -> Ipv6Addr { + let mask = self.mask().to_bits(); + let broadcast = self.addr.to_bits() | !mask; + Ipv6Addr::from_bits(broadcast) } /// Checks if a given `Ipv6Addr` is in this `Ipv6Network` diff --git a/src/lib.rs b/src/lib.rs index 491e7c3..c71e5bb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -200,7 +200,7 @@ impl IpNetwork { /// let net: Ipv4Network = "10.9.0.32/16".parse().unwrap(); /// assert_eq!(net.broadcast(), Ipv4Addr::new(10, 9, 255, 255)); /// ``` - pub fn broadcast(&self) -> IpAddr { + pub const fn broadcast(&self) -> IpAddr { match *self { IpNetwork::V4(ref a) => IpAddr::V4(a.broadcast()), IpNetwork::V6(ref a) => IpAddr::V6(a.broadcast()),