///|
fn main {
  let router = @demo11_syh.EventRouter::new().add_rule(
    @demo11_syh.RouteRule::new(
      "orders",
      "incoming.orders",
      @demo11_syh.RouteFanOut(["orders.work", "orders.audit"]),
    ),
  )
  let bus = @demo11_syh.EventBus::new(name="demo")
    .subscribe("worker", topic="orders.work", (event, _) => {
      @demo11_syh.OutcomeHandled("processed " + event.payload)
    })
    .subscribe("audit", topic="orders.audit", (_, _) => {
      @demo11_syh.OutcomeHandled("recorded")
    })
  let routed = router.route(
    @demo11_syh.Event::new(
      "order.created",
      topic="incoming.orders",
      payload="order-42",
      correlation_id="request-42",
    ),
  )
  let (_, reports) = routed.publish(bus)
  let metrics = @demo11_syh.metrics_from_reports(reports)
  println(metrics.summary())
}