[−][src]Struct iprange::IpRange
A set of networks that supports various operations:
IntoIter is implemented for &IpRange. So, you can use for
to iterate over the networks in an IpRange:
extern crate ipnet; extern crate iprange; use iprange::IpRange; use ipnet::Ipv4Net; fn main() { let ip_range: IpRange<Ipv4Net> = ["172.16.0.0/16", "192.168.1.0/24"] .iter() .map(|s| s.parse().unwrap()) .collect(); for network in &ip_range { println!("{:?}", network); } }
Implementations
impl<N: IpNet> IpRange<N>[src]
pub fn new() -> IpRange<N>[src]
Creates an empty IpRange.
pub fn add(&mut self, network: N) -> &mut Self[src]
Add a network to self.
Returns &mut self in order to enable method chaining.
Pay attention that this operation will not combine two
networks automatically. To do this, call simplify method
explicitly. For example:
extern crate iprange; extern crate ipnet; use iprange::IpRange; use ipnet::Ipv4Net; fn main() { let mut ip_range: IpRange<Ipv4Net> = IpRange::new(); ip_range.add("192.168.0.0/24".parse().unwrap()) .add("192.168.1.0/24".parse().unwrap()); assert_eq!(ip_range.into_iter().count(), 2); ip_range.simplify(); assert_eq!(ip_range.into_iter().count(), 1); }
pub fn remove(&mut self, network: N) -> &mut Self[src]
Remove a network from self.
Returns &mut self in order to enable method chaining.
self does not necessarily has exactly the network to be removed.
The network can be a networkwork of a network in self.
This method will do splitting and remove the corresponding network.
For example:
extern crate iprange; extern crate ipnet; use iprange::IpRange; use ipnet::Ipv4Net; fn main() { let mut ip_range: IpRange<Ipv4Net> = IpRange::new(); ip_range.add("192.168.0.0/23".parse().unwrap()) .remove("192.168.0.0/24".parse().unwrap()); // Now, ip_range has only one network: "192.168.1.0/24". }
pub fn is_empty(&self) -> bool[src]
Returns true if the self has no network.
Examples
let mut ip_range = IpRange::new(); let network: Ipv4Net = "1.0.1.0/24".parse().unwrap(); ip_range.add(network.clone()); ip_range.remove(network); assert!(ip_range.is_empty());
pub fn simplify(&mut self)[src]
Simplify self by combining networks. For example:
extern crate iprange; extern crate ipnet; use iprange::IpRange; use ipnet::Ipv4Net; fn main() { let mut ip_range: IpRange<Ipv4Net> = IpRange::new(); ip_range .add("192.168.0.0/20".parse().unwrap()) .add("192.168.16.0/22".parse().unwrap()) .add("192.168.20.0/24".parse().unwrap()) .add("192.168.21.0/24".parse().unwrap()) .add("192.168.22.0/24".parse().unwrap()) .add("192.168.23.0/24".parse().unwrap()) .add("192.168.24.0/21".parse().unwrap()) .simplify(); // Now, ip_range has only one network: "192.168.0.0/19". }
pub fn merge(&self, other: &IpRange<N>) -> Self[src]
Returns a new IpRange which contains all networks
that is either in self or in other.
The returned IpRange is simplified.
pub fn intersect(&self, other: &IpRange<N>) -> Self[src]
Returns a new IpRange which contains all networks
that is in both self and other.
The returned IpRange is simplified.
pub fn exclude(&self, other: &IpRange<N>) -> IpRange<N>[src]
Returns a new IpRange which contains all networks
that is in self while not in other.
The returned IpRange is simplified.
pub fn contains<T: ToNetwork<N>>(&self, network: &T) -> bool[src]
Tests if self contains network.
network is anything that can be converted into N.
See ToNetwork<N> for detail.
pub fn supernet<T: ToNetwork<N>>(&self, network: &T) -> Option<N>[src]
Returns the network in self which is the supernetwork of network.
Returns None if no network in self contains network.
pub fn iter(&self) -> IpRangeIter<N>[src]
Returns the iterator to &self.
Trait Implementations
impl<N: Clone + IpNet> Clone for IpRange<N>[src]
impl<N: IpNet> Debug for IpRange<N>[src]
impl<N> Default for IpRange<N> where
N: IpNet + ToNetwork<N> + Clone, [src]
N: IpNet + ToNetwork<N> + Clone,
impl<N: Eq + IpNet> Eq for IpRange<N>[src]
impl<N> FromIterator<N> for IpRange<N> where
N: IpNet + ToNetwork<N> + Clone, [src]
N: IpNet + ToNetwork<N> + Clone,
fn from_iter<T>(iter: T) -> Self where
T: IntoIterator<Item = N>, [src]
T: IntoIterator<Item = N>,
impl<'a, N> IntoIterator for &'a IpRange<N> where
N: IpNet + ToNetwork<N> + Clone, [src]
N: IpNet + ToNetwork<N> + Clone,
type Item = N
The type of the elements being iterated over.
type IntoIter = IpRangeIter<N>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter[src]
impl<N: PartialEq + IpNet> PartialEq<IpRange<N>> for IpRange<N>[src]
impl<N: IpNet> StructuralEq for IpRange<N>[src]
impl<N: IpNet> StructuralPartialEq for IpRange<N>[src]
Auto Trait Implementations
impl<N> RefUnwindSafe for IpRange<N> where
N: RefUnwindSafe,
N: RefUnwindSafe,
impl<N> Send for IpRange<N> where
N: Send,
N: Send,
impl<N> Sync for IpRange<N> where
N: Sync,
N: Sync,
impl<N> Unpin for IpRange<N> where
N: Unpin,
N: Unpin,
impl<N> UnwindSafe for IpRange<N> where
N: UnwindSafe,
N: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone, [src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T[src]
fn clone_into(&self, target: &mut T)[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,