invoance 0.2.0

Official Rust SDK for the Invoance compliance API
Documentation
//! Events: ingest, list, get, verify.
//!
//! ```bash
//! INVOANCE_API_KEY=inv_live_... cargo run --example events
//! ```

use invoance::models::{IngestEventParams, ListEventsParams, VerifyEventParams};
use invoance::InvoanceClient;
use serde_json::json;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = InvoanceClient::new()?;

    let payload = json!({ "user_id": "u_42", "ip": "203.0.113.4" });
    let event = client
        .events()
        .ingest(IngestEventParams {
            event_type: "user.login".into(),
            payload: payload.as_object().unwrap().clone(),
            ..Default::default()
        })
        .await?;
    println!("ingested {}", event.event_id);

    let listed = client
        .events()
        .list(ListEventsParams {
            limit: Some(5),
            ..Default::default()
        })
        .await?;
    println!("{} of {} events", listed.events.len(), listed.total);

    let fetched = client.events().get(&event.event_id).await?;
    println!("payload_hash = {}", fetched.payload_hash);

    // Verify by re-submitting the payload the server will canonicalize + hash.
    let verify = client
        .events()
        .verify(
            &event.event_id,
            VerifyEventParams {
                payload: payload.as_object().cloned(),
                ..Default::default()
            },
        )
        .await?;
    println!("match_result = {}", verify.match_result);

    Ok(())
}