/// examples/pubsub — 最小可运行示例。
///
/// 演示 `protocol` 层:构造一条 QoS1 PUBLISH → 编码成字节 → 解码回读。
/// 这是 MQTT 客户端最核心的确定性路径,本地即可运行验证。

fn main() -> Unit {
  // 1. 构造一条 QoS1 PUBLISH。
  //    位置参数:topic / payload / qos / retain / dup / packet_id。
  //    qos 经 `qos_from_int` 构造(返回 Option[QoS],1 = AtLeastOnce)。
  let qos = match @protocol.qos_from_int(1) {
    Some(q) => q
    None => return
  }
  let pkt = @protocol.PublishPacket::new(
    "sensors/temp",
    [0x32, 0x33], // 载荷字节 "23"
    qos,
    false,
    false,
    7,
  )

  // 2. 编码成完整报文(含固定头)
  let bytes = @protocol.encode_publish(pkt)
  let enc = "encoded ("
  let enc2 = enc + bytes.length().to_string() + " bytes)"
  println(enc2)

  // 3. 解码回读,验证往返一致
  match @protocol.decode_publish(bytes) {
    Ok(d) =>
      println(
        "decoded: topic=" + d.topic + " payload=" +
        @debug.Debug::to_repr(d.payload).to_string() + " qos=" +
        @protocol.qos_value(d.qos).to_string(),
      )
    Err(e) => println("decode failed: " + e)
  }
}