Crates.io | fr-trie |
lib.rs | fr-trie |
version | 0.0.4 |
source | src |
created_at | 2021-12-13 14:33:51.09627 |
updated_at | 2022-11-04 06:26:14.334671 |
description | Fuzzy Radix Trie |
homepage | |
repository | https://github.com/cbruiz/fr-trie |
max_upload_size | |
id | 497169 |
size | 50,450 |
This is a generic fuzzy and compact Trie implementation focused on:
Small memory footprint.
Efficient caching.
Trie is keyed by lists of type K
, which can be anything satisfying the KeyPrefix
and Clone
traits.
This structure is thought to be used in some particular scenarios where:
For more information, see the API documentation.
Add fr-trie
to your Cargo.toml
.
[dependencies]
fr-trie = "*"
Glob matching with multiple results
use fr_trie::glob::acl::{Acl, AclTrie, Permissions};
use fr_trie::glob::GlobMatcher;
fn demo() {
let mut trie = AclTrie::new();
trie.insert(Acl::new("/path/*"), Permissions::READ);
trie.insert(Acl::new("/path/to/resource"), Permissions::WRITE);
// Multiget example 1
let result = trie.get_merge::<GlobMatcher>(&Acl::new("/path/to/anything"));
if let Some(value) = result {
if value == Permissions::READ {
println!("Expecting /path/* wilcard key is accessed");
}
}
// Multiget example 2
let result = trie.get_merge::<GlobMatcher>(&Acl::new("/path/to/resource"));
if let Some(value) = result {
if value == (Permissions::READ | Permissions::WRITE) {
println!("Expecting both /path/* wilcard key and /path/to/resource is accessed");
}
}
// Dump trie structure
trie.foreach(|tup| {
let indent= String::from_utf8(vec![b' '; tup.0 *3]).unwrap();
println!("{} {} = {:?}", indent, tup.1, tup.2);
});
}
Licensed under MIT license