pub trait PrefixSet<'a>:
Debug
+ Clone
+ Default
+ Extend<Self::Prefix>
+ FromIterator<Self::Prefix>
+ Extend<Self::Range>
+ FromIterator<Self::Range>
+ One
+ Zero
+ PartialEq
+ Eq
+ PartialOrd
+ BitAnd<Output = Self>
+ BitOr<Output = Self>
+ BitXor<Output = Self>
+ Not<Output = Self>
+ Add<Output = Self>
+ Mul<Output = Self>
+ Sub<Output = Self> {
type Prefix: Prefix;
type Range: Range<Prefix = Self::Prefix>;
type Prefixes: Iterator<Item = Self::Prefix>;
type Ranges: Iterator<Item = Self::Range>;
// Required methods
fn contains(&self, prefix: Self::Prefix) -> bool;
fn prefixes(&'a self) -> Self::Prefixes;
fn ranges(&'a self) -> Self::Ranges;
// Provided methods
fn any() -> Self { ... }
fn len(&'a self) -> usize { ... }
fn is_empty(&'a self) -> bool { ... }
}
Expand description
Address-family independent interface for IP prefix-sets
Methods on PrefixSet
types that are well defined for all address-families
are implemented via this trait.
See also concrete::PrefixSet<A>
and
any::PrefixSet
for address-family specific items.
Required Associated Types§
Sourcetype Range: Range<Prefix = Self::Prefix>
type Range: Range<Prefix = Self::Prefix>
The type of IP prefix-range over which Self
represents a set.
Sourcetype Prefixes: Iterator<Item = Self::Prefix>
type Prefixes: Iterator<Item = Self::Prefix>
The iterator returned by Self::prefixes
.
Sourcetype Ranges: Iterator<Item = Self::Range>
type Ranges: Iterator<Item = Self::Range>
The iterator returned by Self::ranges
.
Required Methods§
Sourcefn contains(&self, prefix: Self::Prefix) -> bool
fn contains(&self, prefix: Self::Prefix) -> bool
Test whether prefix
is contained in self
.
let set: PrefixSet<Ipv4> = ["192.0.2.0/24,26,26".parse::<PrefixRange<Ipv4>>()?]
.into_iter()
.collect();
assert!(set.contains("192.0.2.128/26".parse()?));
Sourcefn prefixes(&'a self) -> Self::Prefixes
fn prefixes(&'a self) -> Self::Prefixes
Get an iterator over the Self::Prefix
s contained in self
.
let set: PrefixSet<Any> = ["192.0.2.0/25", "192.0.2.128/25"]
.into_iter()
.map(Prefix::<Any>::from_str)
.collect::<Result<_, _>>()?;
let mut prefixes = set.prefixes();
assert_eq!(prefixes.next(), Some("192.0.2.0/25".parse()?));
assert_eq!(prefixes.next(), Some("192.0.2.128/25".parse()?));
assert_eq!(prefixes.next(), None);
Sourcefn ranges(&'a self) -> Self::Ranges
fn ranges(&'a self) -> Self::Ranges
Get an iterator over the Self::Range
s contained in self
.
let set: PrefixSet<Any> = ["192.0.2.0/25", "192.0.2.128/25"]
.into_iter()
.map(Prefix::<Any>::from_str)
.collect::<Result<_, _>>()?;
let mut ranges = set.ranges();
assert_eq!(ranges.next(), Some("192.0.2.0/24,25,25".parse()?));
assert_eq!(ranges.next(), None);
Provided Methods§
Sourcefn any() -> Self
fn any() -> Self
Construct a prefix-set consisting of all prefixes.
let set = PrefixSet::<Any>::any();
let mut ranges = set.ranges();
assert_eq!(ranges.next(), Some("0.0.0.0/0,0,32".parse()?));
assert_eq!(ranges.next(), Some("::/0,0,128".parse()?));
assert_eq!(ranges.next(), None);
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.