use ruststream::runtime::{AppInfo, HandlerResult, RustStream, TypedPublisher};
use ruststream::subscriber;
use ruststream_fred::{PubSubMode, RedisBroker, RedisPubSub};
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
struct Event {
kind: String,
}
#[subscriber(RedisPubSub::new("events"), publish("audit"))]
async fn on_event(event: &Event) -> Event {
println!("event: {}", event.kind);
Event {
kind: event.kind.clone(),
}
}
#[subscriber(RedisPubSub::new("events").mode(PubSubMode::Sharded))]
async fn on_event_sharded(event: &Event) -> HandlerResult {
println!("sharded event: {}", event.kind);
HandlerResult::Ack
}
#[ruststream::app]
fn app() -> RustStream {
RustStream::new(AppInfo::new("events", "0.1.0"))
.with_broker(RedisBroker::standalone("redis://localhost:6379"), |b| {
let audit = TypedPublisher::new(b.broker().pubsub_publisher());
b.include_publishing(on_event, audit);
})
.with_broker(RedisBroker::cluster(["redis://localhost:7000"]), |b| {
b.include(on_event_sharded);
})
}