Trait PrefixSet

Source
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§

Source

type Prefix: Prefix

The type of IP prefix over which Self represents a set.

Source

type Range: Range<Prefix = Self::Prefix>

The type of IP prefix-range over which Self represents a set.

Source

type Prefixes: Iterator<Item = Self::Prefix>

The iterator returned by Self::prefixes.

Source

type Ranges: Iterator<Item = Self::Range>

The iterator returned by Self::ranges.

Required Methods§

Source

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()?));
Source

fn prefixes(&'a self) -> Self::Prefixes

Get an iterator over the Self::Prefixs 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);
Source

fn ranges(&'a self) -> Self::Ranges

Get an iterator over the Self::Ranges 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§

Source

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);
Source

fn len(&'a self) -> usize

Get the number of prefixes in self.

let set: PrefixSet<Ipv4> = ["192.0.2.0/24,26,26".parse::<PrefixRange<Ipv4>>()?]
    .into_iter()
    .collect();
assert_eq!(set.len(), 4);
Source

fn is_empty(&'a self) -> bool

Test whether self is empty.

assert!(PrefixSet::<Ipv6>::default().is_empty());

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.

Implementors§

Source§

impl<'a> Set<'a> for ip::any::PrefixSet

Available on crate feature std only.
Source§

type Prefix = Prefix

Source§

type Range = Range

Source§

type Prefixes = Prefixes<'a>

Source§

type Ranges = Ranges<'a>

Source§

impl<'a, A: Afi> Set<'a> for ip::concrete::PrefixSet<A>

Available on crate feature std only.
Source§

type Prefix = Prefix<A>

Source§

type Range = Range<A>

Source§

type Prefixes = Prefixes<'a, A>

Source§

type Ranges = Ranges<'a, A>