use dregs::{ApiErrorKind, Client, Event};
use serde_json::json;
#[tokio::main]
async fn main() -> Result<(), dregs::Error> {
let client = Client::from_env()?;
let event = Event::new("user.signup", "user_12345")
.data(json!({ "plan": "pro", "referrer": "partner-x" }))
.identity_data(json!({
"email": "ada@example.com",
"name": "Ada Lovelace",
"username": "ada",
}))
.event_id("signup-991");
let result = match client.track(event).await {
Ok(result) => result,
Err(error) => {
match error.kind() {
Some(ApiErrorKind::QuotaExceeded) => {
println!("Over the monthly event limit. The event was not recorded.")
}
Some(ApiErrorKind::RateLimited) => {
let wait = error.api_error().and_then(|api| api.retry_after);
println!("Rate limited. Retry after {wait:?}.");
}
_ => println!("Could not reach Dregs: {error}"),
}
return Ok(());
}
};
if result.accepted() {
println!("Recorded event {}.", result.id.unwrap_or_default());
} else {
println!("The event was not recorded (status {:?}).", result.status);
}
Ok(())
}