xdb-parse 0.2.0

High-performance, zero-copy xdb IP geolocation parser (ip2region-compatible)
Documentation
use std::time::Instant;

use anyhow::Result;
use xdb_parse::{load_file, search_ip};

fn main() -> Result<()> {
    // IPv4
    let path_v4 = "./assets/ip2region_v4.xdb";
    let load_start = Instant::now();
    let data_v4 = load_file(path_v4.into())?;
    println!("IPv4 load: {:?}", load_start.elapsed());

    let ip_v4 = "73.24.63.66";
    let start = Instant::now();
    let ret = search_ip(ip_v4, &data_v4)?;
    let elapsed = start.elapsed();
    println!(
        "IPv4 search: {} -> {} ({:.0}ns)",
        ip_v4,
        ret,
        elapsed.as_nanos()
    );

    // IPv6
    let path_v6 = "./assets/ip2region_v6.xdb";
    let load_start = Instant::now();
    let data_v6 = load_file(path_v6.into())?;
    println!("IPv6 load: {:?}", load_start.elapsed());

    let ip_v6 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334";
    let start = Instant::now();
    let ret = search_ip(ip_v6, &data_v6)?;
    let elapsed = start.elapsed();
    println!(
        "IPv6 search: {} -> {} ({:.0}ns)",
        ip_v6,
        ret,
        elapsed.as_nanos()
    );

    Ok(())
}