use durare::{
DurableContext, DurableEngine, InMemoryProvider, Result, WorkflowDef, WorkflowOptions,
};
use std::sync::Arc;
use std::time::Duration;
#[durare::workflow]
async fn double(_ctx: DurableContext, n: i64) -> Result<i64> {
Ok(n * 2)
}
#[durare::workflow]
async fn greet(_ctx: DurableContext, name: String) -> Result<String> {
Ok(format!("hello, {name}"))
}
#[tokio::test]
async fn start_with_runs_typed_ref() -> Result<()> {
assert_eq!(Double::NAME, "double");
assert_eq!(Greet::NAME, "greet");
let engine = DurableEngine::new(Arc::new(InMemoryProvider::new())).await?;
engine.launch().await?;
let handle = engine
.start_with(Double, 21_i64, WorkflowOptions::default())
.await?;
let doubled: i64 = handle.await?;
assert_eq!(doubled, 42);
let greeting: String = engine
.start_with(Greet, "sam".to_string(), WorkflowOptions::default())
.await?
.await?;
assert_eq!(greeting, "hello, sam");
engine.shutdown(Duration::from_secs(1)).await?;
Ok(())
}