Crates.io | ip_network_table |
lib.rs | ip_network_table |
version | 0.2.0 |
source | src |
created_at | 2019-05-18 11:32:40.646495 |
updated_at | 2021-07-12 08:22:34.920605 |
description | IPv4 and IPv6 network fast lookup table. |
homepage | https://github.com/JakubOnderka/ip_network_table |
repository | https://github.com/JakubOnderka/ip_network_table |
max_upload_size | |
id | 135069 |
size | 27,922 |
IPv4 and IPv6 network fast lookup table.
This crate provides storage and retrieval of IPv4 and IPv6 network prefixes.
Currently, it uses ip_network
crate, that provides IP network data structure and fork of
treebitmap
(fork) as backend, that provides fast lookup times, and a small memory footprint. Backend can be changed in future releases.
Add this to your Cargo.toml
:
[dependencies]
ip_network = "0.4"
ip_network_table = "0.2"
this to your crate root (not necessary when your project is Rust 2018 edition):
extern crate ip_network;
extern crate ip_network_table;
and then you can use it like this:
use std::net::{IpAddr, Ipv6Addr};
use ip_network::{IpNetwork, Ipv6Network};
use ip_network_table::IpNetworkTable;
let mut table = IpNetworkTable::new();
let network = IpNetwork::new(Ipv6Addr::new(0x2001, 0xdb8, 0xdead, 0xbeef, 0, 0, 0, 0), 64).unwrap();
let ip_address = Ipv6Addr::new(0x2001, 0xdb8, 0xdead, 0xbeef, 0, 0, 0, 0x1);
assert_eq!(table.insert(network.clone(), "foo"), None);
// Get value for network from table
assert_eq!(table.longest_match(ip_address), Some((network, &"foo")));
Minimal required version of Rust compiler is 1.31 (because of ip_network
crate).