prefixset-rs

Crates.io ci/cd codecov docs.rs

About

A Rust library crate prefixset, providing a set-like container for IP prefixes (not IP addresses).

Sets of prefixes are stored in a binary radix tree structure that provides:

Prior art

This is a Rust implementation derived in large part from the internal data-structure used in the widely used [bgpq3] tool by Alexandre Snarskii, packaged as a library, and with the set-theoretic operations added.

Usage

Full documentation can be found here.

``` rust extern crate prefixset; use prefixset::{Error, Ipv6Prefix, IpPrefixRange, PrefixSet};

fn main() -> Result<(), Error> {

// create a set by parsing a Vec<&str>
let set = vec![
        "2001:db8::/37",
        "2001:db8:f00::/37",
    ]
    .iter()
    .map(|s| s.parse::<Ipv6Prefix>())
    .collect::<Result<PrefixSet<_>, _>>()?;

// create a range by parsing a &str and providing the lower
// and upper prefix lenth bounds
let range = IpPrefixRange::new("2001:db8::/36".parse()?, 37, 37)?;

assert_eq!(set.ranges().collect::<Vec<_>>(), vec![range]);
Ok(())

} ```