///|
fn bytes_text(data : Bytes) -> String {
  try @utf8.decode(data[:]) catch {
    _ => ""
  } noraise {
    value => value
  }
}

///|
/// Run a no-service publish/consume demonstration.
fn main {
  let broker = @broker.Broker::new()
  let queue = match broker.declare_queue("demo") {
    Ok(value) => value
    Err(_) => {
      println("MoonMQ demo failed to declare its queue")
      return
    }
  }
  match
    broker.publish(
      "", queue, b"hello from an embedded broker \xE5\xB5\x8C\xE5\x85\xa5",
    ) {
    Ok(count) =>
      println("published to \{count} queue(s) through the default exchange")
    Err(_) => {
      println("MoonMQ demo failed to publish")
      return
    }
  }
  match broker.get(queue) {
    Ok(Some(delivery)) => {
      println("consumed: \{bytes_text(delivery.body())}")
      match broker.ack(delivery.tag()) {
        Ok(_) => println("acknowledged delivery \{delivery.tag()}")
        Err(_) => println("MoonMQ demo failed to acknowledge")
      }
    }
    Ok(None) => println("MoonMQ demo queue was unexpectedly empty")
    Err(_) => println("MoonMQ demo failed to consume")
  }
}