Trait ip::traits::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());

Implementors§

source§

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

Available on crate feature std only.
§

type Prefix = Prefix

§

type Range = Range

§

type Prefixes = Prefixes<'a>

§

type Ranges = Ranges<'a>

source§

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

Available on crate feature std only.
§

type Prefix = Prefix<A>

§

type Range = Range<A>

§

type Prefixes = Prefixes<'a, A>

§

type Ranges = Ranges<'a, A>