use std::env;
use std::sync::Arc;
use akribes_sdk::{AkribesClient, Result};
use tokio::sync::Notify;
#[tokio::main]
async fn main() -> Result<()> {
let base_url = env::var("AKRIBES_BASE_URL").unwrap_or_else(|_| "http://localhost:3001".into());
let token = env::var("AKRIBES_TOKEN").ok();
let mut builder = AkribesClient::builder(&base_url).name("rust-sdk-subscribe-first");
if let Some(t) = token {
builder = builder.token(t);
}
let client = builder.build();
let project_id = client.get_sandbox_project_id().await?;
println!("[subscribe_first] sandbox project_id = {project_id}");
let ready = Arc::new(Notify::new());
let (mut rx, sub) = client
.adhoc_event_stream_with_ready(project_id, Some(Arc::clone(&ready)))
.await?;
ready.notified().await;
println!("[subscribe_first] SSE subscriber attached, safe to POST");
let source = r#"
input
greeting: string
workflow
return greeting
"#;
let mut inputs = std::collections::HashMap::new();
inputs.insert("greeting".to_string(), serde_json::json!("hi from rust"));
let result = client.run_adhoc(source, Some(inputs), None).await?;
println!(
"[subscribe_first] dispatched execution {}",
result.execution_id
);
while let Some(hub_event) = rx.recv().await {
println!("[subscribe_first] hub event: {hub_event:?}");
}
drop(sub);
Ok(())
}