use ruststream::codec::{CborCodec, JsonCodec};
use ruststream::memory::prelude::*;
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct Order {
id: u64,
}
#[subscriber("orders")]
async fn handle(order: &Order) -> HandlerOutcome {
println!("got order {}", order.id);
HandlerOutcome::ack()
}
#[subscriber("audit")]
async fn audit(order: &Order) -> HandlerOutcome {
println!("audited order {}", order.id);
HandlerOutcome::ack()
}
#[subscriber("orders", on_failure(decode = retry))]
async fn strict(order: &Order) -> HandlerOutcome {
println!("strictly decoded order {}", order.id);
HandlerOutcome::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));
b.include(strict);
})
}