use std::time::Instant; use tst::TST; 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(()) }