use invoance::models::{IngestAttestationParams, IngestEventParams};
use invoance::InvoanceClient;
use serde_json::json;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = InvoanceClient::new()?;
let check = client.validate().await;
if !check.valid {
eprintln!("Invoance config invalid: {:?}", check.reason);
return Ok(());
}
println!("connected to {}", check.base_url);
let event = client
.events()
.ingest(IngestEventParams {
event_type: "policy.approval".into(),
payload: json!({ "policy_id": "pol_001", "decision": "approved" })
.as_object()
.unwrap()
.clone(),
..Default::default()
})
.await?;
println!("event_id = {}", event.event_id);
let att = client
.attestations()
.ingest(IngestAttestationParams {
r#type: "output".into(),
input: "Summarize this contract".into(),
output: "The contract states...".into(),
model_provider: "openai".into(),
model_name: "gpt-4o".into(),
model_version: "2025-01-01".into(),
subject: json!({ "user_id": "u_42", "session_id": "sess_4f9a" })
.as_object()
.cloned(),
..Default::default()
})
.await?;
println!("attestation_id = {}", att.attestation_id);
Ok(())
}