use ruststream::memory::MemoryBroker;
use ruststream::runtime::layers::TracingLayer;
use ruststream::runtime::{AppInfo, HandlerResult, Identity, Router, RouterDef, RustStream, Stack};
use ruststream::subscriber;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct Order {
id: u64,
quantity: u32,
}
#[subscriber("orders")]
async fn confirm(order: &Order) -> HandlerResult {
let _ = order.id;
HandlerResult::Ack
}
#[subscriber("returns")]
async fn reject(order: &Order) -> HandlerResult {
if order.quantity == 0 {
return HandlerResult::retry();
}
HandlerResult::Ack
}
fn routes() -> impl RouterDef<MemoryBroker> {
Router::new().include(confirm).include(reject)
}
#[ruststream::app]
fn app() -> RustStream<Stack<TracingLayer, Identity>> {
RustStream::new(AppInfo::new("orders", "0.1.0"))
.layer(TracingLayer::default())
.with_broker(MemoryBroker::new(), |b| b.include_router(routes()))
}