use edgestore::{EdgestoreConfig, Engine};
use std::path::PathBuf;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let db_path = PathBuf::from("/tmp/edgestore_basic_kv_example");
let _ = std::fs::remove_dir_all(&db_path);
println!("=== EdgeStore Basic KV Example ===\n");
let config = EdgestoreConfig::new(&db_path);
let mut engine = Engine::open(config)?;
println!("Opened database at {:?}\n", db_path);
engine.put(b"users", b"alice", b"admin")?;
engine.put(b"users", b"bob", b"editor")?;
engine.put(b"products", b"sku-42", b"Widget Pro")?;
engine.put(b"products", b"sku-99", b"Gadget Lite")?;
engine.put(b"metadata", b"version", b"1.0.0")?;
println!("Put 5 keys across 3 namespaces: users, products, metadata\n");
let alice = engine.get(b"users", b"alice")?;
println!("Get users/alice: {:?}\n", alice.as_deref().map(|v| String::from_utf8_lossy(v)));
println!("Range scan products [sku-42, sku-99]:");
for (key, val) in engine.range(b"products", b"sku-42", b"sku-99\x00")? {
println!(" {} => {}", String::from_utf8_lossy(&key), String::from_utf8_lossy(&val));
}
println!();
println!("Prefix scan products (sku-):");
for (key, val) in engine.prefix(b"products", b"sku-")? {
println!(" {} => {}", String::from_utf8_lossy(&key), String::from_utf8_lossy(&val));
}
println!();
engine.delete(b"users", b"bob")?;
let bob = engine.get(b"users", b"bob")?;
println!("After delete, get users/bob: {:?}\n", bob);
engine.flush()?;
println!("Flushed WAL to disk.\n");
drop(engine);
println!("Closed database. Cleanup complete.");
let _ = std::fs::remove_dir_all(&db_path);
Ok(())
}