rmqtt-codec 0.3.0

MQTT protocol codec implementation with multi-version support and version negotiation
Documentation

English | 简体中文

rmqtt-codec

crates.io page docs.rs page

MQTT protocol codec — v3.1.1 / v5.0 encoding and decoding with handshake-based version negotiation.

Public types

MqttCodec (enum)

pub enum MqttCodec {
    V3(v3::Codec),
    V5(v5::Codec),
    Version(version::VersionCodec),
}

Implements tokio_util::codec::Encoder<MqttPacket> (error: EncodeError) and tokio_util::codec::Decoder (yields (MqttPacket, u32) — packet + consumed bytes; error: DecodeError).

MqttPacket (enum)

pub enum MqttPacket {
    V3(v3::Packet),
    V5(v5::Packet),
    Version(version::ProtocolVersion),
}

Public modules

Module Contents
v3 Codec, Packet (Connect, ConnAck, Publish, PubAck, PubRec, PubRel, PubComp, Subscribe, SubAck, Unsubscribe, UnsubAck, PingRequest, PingResponse, Disconnect), ConnAckReason
v5 Codec, Packet (same + Auth), PublishProperties, Auth, DisconnectReasonCode, SubscribeAckReason, UserProperties, ToReasonCode trait
version VersionCodec, ProtocolVersion (MQTT3, MQTT5) — handshake detection
error HandshakeError, ProtocolError, DecodeError, EncodeError, SendPacketError
types QoS (AtMostOnce=0, AtLeastOnce=1, ExactlyOnce=2), Protocol (wrapper around u8), SubscribeReason, PacketId, Publish
cert Certificate-related helpers

Error types

pub enum HandshakeError { Protocol(ProtocolError), Timeout }
pub enum ProtocolError { Decode(DecodeError), Encode(EncodeError), Timeout, ... }
pub enum DecodeError { ... }
pub enum EncodeError { MalformedPacket, UnsupportedVersion, ... }
pub enum SendPacketError { Disconnected(ByteString), Full, ... }

Usage

use bytes::BytesMut;
use rmqtt_codec::{MqttCodec, MqttPacket, v3};
use tokio_util::codec::{Encoder, Decoder};

let mut codec = MqttCodec::V3(v3::Codec::new(1024 * 1024)); // max_packet_size
let mut buf = BytesMut::new();
codec.encode(MqttPacket::V3(v3::Packet::PingRequest), &mut buf).unwrap();

Cargo.toml

[dependencies]

rmqtt-codec = "0.2"

Dependencies

tokio-util (codec), bytes, bytestring, serde, thiserror, bitflags, chrono, nonzero_ext, rmqtt-utils.

No features.

License

MIT OR Apache-2.0