#radix-tree #glob #regex #radixset

radixmap

Rust-based Radix Tree for fast prefix lookup, supporting named param, regex and glob

1 unstable release

new 0.1.0 Apr 10, 2024
0.0.0 Mar 27, 2024

#6 in #radix-tree

Download history 120/week @ 2024-03-22 28/week @ 2024-03-29 106/week @ 2024-04-05

254 downloads per month

MIT license

110KB
1K SLoC

radixmap

⚠️ Caution: Not Ready for Production! ⚠️

Rust-based Radix Tree for fast prefix lookup, supporting named param, regex and glob

Crates.io MIT licensed Documentation Build Status Build Status Build Status

Features

  • Fast prefix-based lookup
  • RadixMap and RadixSet support
  • Standard collection-compatible interfaces
  • Named param, regex and glob support
  • Pre-order, post-order, level-order iterations
  • Comprehensive unit tests for correctness

Example

use radixmap::{RadixMap, RadixResult};

fn main() -> RadixResult<()> {
    let mut map = RadixMap::new();
    map.insert("/api", "api")?;
    map.insert("/api/v1", "v1")?;
    map.insert("/api/v1/user", "user1")?;
    map.insert("/api/v2", "v2")?;
    map.insert("/api/v2/user", "user2")?;

    assert_eq!(map.get("/api/v1/user"), Some(&"user1"));
    assert_eq!(map.get("/api/v2/user"), Some(&"user2"));

    let mut iter = map.iter(); // pre-order by default

    assert_eq!(iter.next(), Some(("/api", &"api")));
    assert_eq!(iter.next(), Some(("/api/v1", &"v1")));
    assert_eq!(iter.next(), Some(("/api/v1/user", &"user1")));
    assert_eq!(iter.next(), Some(("/api/v2", &"v2")));
    assert_eq!(iter.next(), Some(("/api/v2/user", &"user2")));
    assert_eq!(iter.next(), None);

    Ok(())
}

Benchmark

  • MacBook Air, Apple M2 24G, Sonoma 14.4, Rust 1.77.1
Name Time
  • AWS c5.2xlarge, 8C 16G, Ubuntu 22.04, Rust 1.77.1
Name Time

Documentation

The documentation is available here.

License

This software is released under the MIT License.

Dependencies

~3.5–5.5MB
~93K SLoC