75 lines
2.3 KiB
Rust
75 lines
2.3 KiB
Rust
use tst::TST;
|
|
use std::time::Instant;
|
|
|
|
fn main() -> Result<(), tst::Error> {
|
|
// Create a temporary directory for the database
|
|
let db_path = std::env::temp_dir().join("tst_example");
|
|
std::fs::create_dir_all(&db_path)?;
|
|
|
|
println!("Creating ternary search tree at: {}", db_path.display());
|
|
|
|
// Create a new TST
|
|
let mut tree = TST::new(db_path.to_str().unwrap(), true)?;
|
|
|
|
// Store some data
|
|
println!("Inserting data...");
|
|
tree.set("hello", b"world".to_vec())?;
|
|
tree.set("help", b"me".to_vec())?;
|
|
tree.set("helicopter", b"flying".to_vec())?;
|
|
tree.set("apple", b"fruit".to_vec())?;
|
|
tree.set("application", b"software".to_vec())?;
|
|
tree.set("banana", b"yellow".to_vec())?;
|
|
|
|
// Retrieve and print the data
|
|
let value = tree.get("hello")?;
|
|
println!("hello: {}", String::from_utf8_lossy(&value));
|
|
|
|
// List keys with prefix
|
|
println!("\nListing keys with prefix 'hel':");
|
|
let start = Instant::now();
|
|
let keys = tree.list("hel")?;
|
|
let duration = start.elapsed();
|
|
|
|
for key in &keys {
|
|
println!(" {}", key);
|
|
}
|
|
println!("Found {} keys in {:?}", keys.len(), duration);
|
|
|
|
// Get all values with prefix
|
|
println!("\nGetting all values with prefix 'app':");
|
|
let start = Instant::now();
|
|
let values = tree.getall("app")?;
|
|
let duration = start.elapsed();
|
|
|
|
for (i, value) in values.iter().enumerate() {
|
|
println!(" Value {}: {}", i + 1, String::from_utf8_lossy(value));
|
|
}
|
|
println!("Found {} values in {:?}", values.len(), duration);
|
|
|
|
// Delete a key
|
|
println!("\nDeleting 'help'...");
|
|
tree.delete("help")?;
|
|
|
|
// Verify deletion
|
|
println!("Listing keys with prefix 'hel' after deletion:");
|
|
let keys_after = tree.list("hel")?;
|
|
for key in &keys_after {
|
|
println!(" {}", key);
|
|
}
|
|
|
|
// Try to get a deleted key
|
|
match tree.get("help") {
|
|
Ok(_) => println!("Unexpectedly found 'help' after deletion!"),
|
|
Err(e) => println!("As expected, 'help' was not found: {}", e),
|
|
}
|
|
|
|
// Clean up (optional)
|
|
if std::env::var("KEEP_DB").is_err() {
|
|
std::fs::remove_dir_all(&db_path)?;
|
|
println!("\nCleaned up database directory");
|
|
} else {
|
|
println!("\nDatabase kept at: {}", db_path.display());
|
|
}
|
|
|
|
Ok(())
|
|
} |