use emdb::AsyncEmdb;
#[tokio::main(flavor = "multi_thread", worker_threads = 4)]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let db = AsyncEmdb::open_in_memory();
db.insert("alpha", "one").await?;
db.insert("beta", "two").await?;
let alpha = db.get("alpha").await?;
println!(
"alpha = {:?}",
alpha.as_deref().map(String::from_utf8_lossy)
);
assert_eq!(alpha.as_deref(), Some(b"one".as_slice()));
let batch: Vec<(String, String)> = (0..100)
.map(|i| (format!("k{i:03}"), format!("v{i}")))
.collect();
db.insert_many(batch.iter().map(|(k, v)| (k.as_str(), v.as_str())))
.await?;
assert_eq!(db.len().await?, 102); println!(
"inserted 100 records via insert_many; len = {}",
db.len().await?
);
let users = db.namespace("users").await?;
users.insert("alice", "user-data").await?;
users.insert("bob", "user-data").await?;
assert_eq!(users.len().await?, 2);
assert_eq!(db.len().await?, 102); println!(
"users namespace has {} records, default has {}",
users.len().await?,
db.len().await?
);
db.transaction(|tx| {
tx.insert("atomic-1", "yes")?;
tx.insert("atomic-2", "yes")?;
Ok(())
})
.await?;
println!("transaction committed; atomic-1 + atomic-2 visible");
let sync_db = db.sync_handle();
let count = tokio::task::spawn_blocking(move || sync_db.len()).await??;
println!("via sync_handle, len = {count}");
Ok(())
}