use ruststream::runtime::{AppInfo, HandlerResult, RustStream, TypedPublisher};
use ruststream::subscriber;
use ruststream_fred::RedisBroker;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
struct Order {
id: u64,
}
#[subscriber(batch("orders"), publish("processed"))]
async fn process(orders: &[Order]) -> Result<Vec<Order>, HandlerResult> {
if orders.is_empty() {
return Err(HandlerResult::drop());
}
Ok(orders.iter().map(|o| Order { id: o.id }).collect())
}
#[ruststream::app]
fn app() -> RustStream {
let broker = RedisBroker::standalone("redis://localhost:6379").default_group("workers");
RustStream::new(AppInfo::new("orders", "0.1.0")).with_broker(broker, |b| {
let processed = TypedPublisher::new(b.broker().publisher()).transactional();
b.include_batch_publishing(process, processed);
})
}