use shardd::{Client, CreateEventOptions};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = std::env::var("SHARDD_API_KEY").expect("set SHARDD_API_KEY in your environment");
let bucket = std::env::var("SHARDD_BUCKET").unwrap_or_else(|_| "demo".into());
let client = Client::new(api_key)?;
let first = client
.create_event(
&bucket,
"user:alice",
500,
CreateEventOptions {
note: Some("sdk quickstart credit".into()),
..Default::default()
},
)
.await?;
println!(
"credited: event={} balance={} deduplicated={}",
first.event.event_id, first.balance, first.deduplicated
);
let replay = client
.create_event(
&bucket,
"user:alice",
500,
CreateEventOptions {
note: Some("sdk quickstart credit".into()),
idempotency_nonce: Some(first.event.idempotency_nonce.clone()),
..Default::default()
},
)
.await?;
println!(
"retried: event={} balance={} deduplicated={}",
replay.event.event_id, replay.balance, replay.deduplicated
);
assert_eq!(first.event.event_id, replay.event.event_id);
let balances = client.get_balances(&bucket).await?;
for row in &balances.accounts {
println!(
" {} = {} (available {})",
row.account, row.balance, row.available_balance
);
}
let h = client.health(None).await?;
println!(
"pinned edge: {} (region {}, sync_gap {:?})",
h.edge_id.as_deref().unwrap_or("?"),
h.region.as_deref().unwrap_or("?"),
h.sync_gap
);
Ok(())
}