2个版本
0.1.0-rc.2 | 2021年8月22日 |
---|---|
0.1.0-rc.1 | 2021年8月4日 |
在#route中排名8
9.5MB
3K SLoC
prefixset-rs
关于
这是一个Rust库包prefixset
,提供IP前缀(非 IP地址)的集合容器。
前缀集合以二叉基数树结构存储,提供
- 单次遍历中快速插入连续前缀范围
- 遍历前缀或前缀范围
- 每个操作上的自聚合
先前的技术
这是从广泛使用的Alexandre Snarskii的工具bgpq3
中的内部数据结构衍生出来的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(())
}