use ruststream::memory::MemoryBroker;
use ruststream::runtime::{AppInfo, HandlerResult, Router, RouterDef, RustStream};
use ruststream::subscriber;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct Order {
id: u64,
}
#[derive(Debug, Deserialize)]
struct Shipment {
order_id: u64,
}
#[subscriber("orders")]
async fn accept(order: &Order) -> HandlerResult {
println!("accepted order {}", order.id);
HandlerResult::Ack
}
#[subscriber("shipments")]
async fn dispatch(shipment: &Shipment) -> HandlerResult {
println!("dispatched shipment for order {}", shipment.order_id);
HandlerResult::Ack
}
fn orders() -> Router<MemoryBroker, impl RouterDef<MemoryBroker>> {
Router::new().include(accept)
}
fn shipping() -> Router<MemoryBroker, impl RouterDef<MemoryBroker>> {
Router::new().include(dispatch)
}
#[ruststream::app]
fn app() -> RustStream {
RustStream::new(AppInfo::new("routing", "0.1.0")).with_broker(MemoryBroker::new(), |b| {
let all = orders().merge(shipping());
b.include_router(all);
})
}