use emdb::Emdb;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let db = Emdb::open_in_memory();
db.insert("global:flag", "on")?;
let users = db.namespace("users")?;
let sessions = db.namespace("sessions")?;
users.insert("alice", "user-data-alice")?;
users.insert("bob", "user-data-bob")?;
sessions.insert("session-token-1", "alice")?;
sessions.insert("session-token-2", "alice")?;
sessions.insert("session-token-3", "bob")?;
println!("default namespace len = {}", db.len()?);
println!("users namespace len = {}", users.len()?);
println!("sessions namespace len = {}", sessions.len()?);
assert_eq!(db.len()?, 1);
assert_eq!(users.len()?, 2);
assert_eq!(sessions.len()?, 3);
assert!(db.get("alice")?.is_none()); assert!(users.get("session-token-1")?.is_none()); println!("\nisolation verified — keys don't cross namespaces");
let names = db.list_namespaces()?;
println!("\nlist_namespaces() = {names:?}");
assert!(names.iter().any(|n| n == "users"));
assert!(names.iter().any(|n| n == "sessions"));
sessions.clear()?;
println!("\nafter sessions.clear():");
println!(" users len = {}", users.len()?);
println!(" sessions len = {}", sessions.len()?);
assert_eq!(users.len()?, 2);
assert_eq!(sessions.len()?, 0);
let dropped = db.drop_namespace("sessions")?;
println!("\ndrop_namespace('sessions') -> {dropped}");
assert!(dropped);
let names_after = db.list_namespaces()?;
println!("list_namespaces() = {names_after:?}");
assert!(!names_after.iter().any(|n| n == "sessions"));
Ok(())
}