prefixset

Crates.ioprefixset
lib.rsprefixset
version0.1.0-rc.2
sourcesrc
created_at2021-08-04 10:38:43.832578
updated_at2021-08-22 07:16:49.32393
descriptionAn efficient set container for IP address prefixes
homepage
repositoryhttps://github.com/wolcomm/prefix-set-rs
max_upload_size
id431463
size71,191,744
Ben Maddison (benmaddison)

documentation

README

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:

  • Fast insertion of contiguous prefix ranges in a single traversal,
  • Iteration over either prefixes or ranges of prefixes, and
  • Self aggregation on each operation.

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.

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(())
}
Commit count: 52

cargo fmt