use ruststream::runtime::HandlerOutcome;
use ruststream::{Outgoing, subscriber};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, JsonSchema)]
pub struct Order {
pub id: u64,
pub item: String,
pub quantity: u32,
}
#[derive(Debug, Serialize, JsonSchema, Outgoing)]
#[outgoing(name = "confirmations")]
pub struct Confirmation {
pub id: u64,
pub accepted: bool,
}
#[subscriber("orders", publish)]
pub async fn confirm(order: &Order) -> Confirmation {
Confirmation {
id: order.id,
accepted: order.quantity > 0,
}
}
#[subscriber("cancellations")]
pub async fn on_cancel(order: &Order) -> HandlerOutcome {
println!("order {} ({}) cancelled", order.id, order.item);
HandlerOutcome::ack()
}