use ruststream::codec::{CborCodec, JsonCodec};
use ruststream::memory::MemoryBroker;
use ruststream::runtime::{
AppInfo, Context, DecodeFailure, HandlerMetadata, HandlerResult, Router, RustStream, typed,
};
use ruststream::subscriber;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct Order {
id: u64,
}
#[subscriber("orders")]
async fn handle(order: &Order) -> HandlerResult {
println!("got order {}", order.id);
HandlerResult::Ack
}
#[subscriber("audit")]
async fn audit(order: &Order) -> HandlerResult {
println!("audited order {}", order.id);
HandlerResult::Ack
}
#[ruststream::app]
fn app() -> RustStream {
let info = AppInfo::new("codecs", "0.1.0");
RustStream::new(info)
.with_broker_codec(MemoryBroker::new(), CborCodec, |b| {
b.include(handle); b.include(audit); })
.with_broker(MemoryBroker::new(), |b| {
b.include_router(Router::new().with_codec(JsonCodec).include(handle));
let strict = typed(JsonCodec, |_order: &Order, _ctx: &mut Context| async {
HandlerResult::Ack
})
.on_decode_failure(DecodeFailure::Requeue);
b.handle(
b.broker().subscribe("orders"),
strict,
HandlerMetadata::typed::<Order>("orders"),
);
})
}