use foundationdb::{Database, FdbBindingError};
#[tokio::main]
async fn main() {
let network = unsafe { foundationdb::boot() };
if let Err(e) = instrumented_example().await {
eprintln!("Error running instrumented example: {e:?}");
}
drop(network);
}
async fn instrumented_example() -> Result<(), FdbBindingError> {
let db = Database::default()?;
println!("Running an instrumented transaction...");
let result = db
.instrumented_run(|txn, _| async move {
txn.set(b"instrumented_key", b"instrumented_value");
let _ = txn.get(b"instrumented_key", false).await?;
txn.set_custom_metric("operations_count", 1, &[("type", "write")])?;
Ok(())
})
.await;
match result {
Ok((_, metrics)) => {
println!("Transaction successful!");
println!("--- Metrics Report ---");
println!("{metrics:#?}");
println!("----------------------");
}
Err((err, metrics)) => {
eprintln!("Transaction failed: {err:?}");
eprintln!("--- Metrics Report (on failure) ---");
println!("{metrics:#?}");
println!("-----------------------------------");
return Err(err);
}
}
Ok(())
}