From f7d9524f708898b93d700bda3526a99290274f10 Mon Sep 17 00:00:00 2001 From: Michal 'vorner' Vaner Date: Thu, 5 Dec 2019 20:15:21 +0100 Subject: [PATCH] Make the iterators slightly better * Implement some useful traits on them. * Make reference an into-iterator. --- src/ipv4.rs | 9 +++++++++ src/ipv6.rs | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/src/ipv4.rs b/src/ipv4.rs index 95e2a27..0d8ee6a 100644 --- a/src/ipv4.rs +++ b/src/ipv4.rs @@ -253,6 +253,7 @@ impl From for Ipv4Network { } } +#[derive(Clone, Debug)] pub struct Ipv4NetworkIterator { next: u32, end: u32, @@ -272,6 +273,14 @@ impl Iterator for Ipv4NetworkIterator { } } +impl IntoIterator for &'_ Ipv4Network { + type IntoIter = Ipv4NetworkIterator; + type Item = Ipv4Addr; + fn into_iter(self) -> Ipv4NetworkIterator { + self.iter() + } +} + /// Converts a `Ipv4Addr` network mask into a prefix. /// /// If the mask is invalid this will return an `IpNetworkError::InvalidPrefix`. diff --git a/src/ipv6.rs b/src/ipv6.rs index 0790f93..9152d08 100644 --- a/src/ipv6.rs +++ b/src/ipv6.rs @@ -227,6 +227,7 @@ impl From for Ipv6Network { } } +#[derive(Clone, Debug)] pub struct Ipv6NetworkIterator { next: u128, end: u128, @@ -246,6 +247,14 @@ impl Iterator for Ipv6NetworkIterator { } } +impl IntoIterator for &'_ Ipv6Network { + type IntoIter = Ipv6NetworkIterator; + type Item = Ipv6Addr; + fn into_iter(self) -> Ipv6NetworkIterator { + self.iter() + } +} + impl fmt::Display for Ipv6Network { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { write!(fmt, "{}/{}", self.ip(), self.prefix())