use emdb::Emdb;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let db = Emdb::builder().enable_range_scans(true).build()?;
for i in 0..10 {
db.insert(format!("user:{i:03}"), format!("u{i}"))?;
db.insert(format!("session:{i:03}"), format!("s{i}"))?;
}
db.insert("aardvark", "out-of-band")?;
db.insert("zebra", "out-of-band")?;
let users = db.range(b"user:".to_vec()..b"user;".to_vec())?;
println!("range 'user:'..'user;' yields {} records:", users.len());
for (k, v) in &users {
println!(
" {} = {}",
String::from_utf8_lossy(k),
String::from_utf8_lossy(v)
);
}
assert_eq!(users.len(), 10);
let sessions = db.range_prefix("session:")?;
println!("\nprefix 'session:' yields {} records", sessions.len());
assert_eq!(sessions.len(), 10);
let lazy = db.range_iter(b"user:".to_vec()..b"user;".to_vec())?;
let first_three: Vec<_> = lazy.take(3).collect();
println!("\nlazy range_iter, first 3 only:");
for (k, _v) in &first_three {
println!(" {}", String::from_utf8_lossy(k));
}
assert_eq!(first_three.len(), 3);
let from = db.iter_from("user:005")?;
let from_count = from.count();
println!("\niter_from('user:005') yields {from_count} records (inclusive)");
assert_eq!(from_count, 6);
Ok(())
}