use ruststream::runtime::HandlerResult;
use ruststream::subscriber;
use serde::{Deserialize, Serialize};
use crate::stream::OrdersStream;
#[derive(Debug, Deserialize)]
pub(crate) struct Order {
pub(crate) id: u64,
pub(crate) item: String,
pub(crate) quantity: u32,
}
#[derive(Debug, Serialize)]
pub(crate) struct Confirmation {
pub(crate) id: u64,
pub(crate) accepted: bool,
}
#[subscriber(OrdersStream::new("orders", "workers"), publish("confirmations"))]
pub(crate) async fn confirm(order: &Order) -> Confirmation {
Confirmation {
id: order.id,
accepted: order.quantity > 0,
}
}
#[subscriber("cancellations")]
pub(crate) async fn on_cancel(order: &Order) -> HandlerResult {
println!("order {} ({}) cancelled", order.id, order.item);
HandlerResult::Ack
}