use ruststream::memory::prelude::*;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct Order {
id: u64,
}
#[subscriber("orders")]
async fn handle(order: &Order) -> HandlerOutcome {
let id = order.id;
HandlerOutcome::ack().and_after(async move {
println!("order {id} acked; notifying downstream");
})
}
#[subscriber("orders")]
async fn handle_batch(orders: &[Order]) -> Vec<HandlerOutcome> {
orders
.iter()
.map(|order| {
if order.id == 0 {
HandlerOutcome::retry()
} else {
let id = order.id;
HandlerOutcome::ack().and_after(async move {
println!("order {id} acked in batch; following up");
})
}
})
.collect()
}
#[ruststream::app]
fn app() -> RustStream {
RustStream::new(AppInfo::new("post_settle", "0.1.0")).with_broker(MemoryBroker::new(), |b| {
b.include(handle);
b.include(handle_batch.batch(nonzero!(64)));
})
}