Skip to main content

Crate zerodds_mqtt_bridge

Crate zerodds_mqtt_bridge 

Source
Expand description

Crate zerodds-mqtt-bridge. Safety classification: STANDARD.

MQTT v5.0 (OASIS Standard 07 March 2019) wire codec + broker + DDS bridge — pure-Rust no_std + alloc, forbid(unsafe_code). Implements the full MQTT 5.0 spec incl. all control-packet bodies (CONNECT / CONNACK / PUBLISH / PUBACK / PUBREC / PUBREL / PUBCOMP / SUBSCRIBE / SUBACK / UNSUBSCRIBE / UNSUBACK / PINGREQ / PINGRESP / DISCONNECT / AUTH), all properties (§2.2.2), a keep-alive tracker (§3.1.2.10), topic-filter matching with wildcards (§4.7), an in-memory broker with session state + retained messages + will messages, and an MQTT↔DDS topic bridge.

Spec: OASIS MQTT 5.0 §1 (Introduction), §1.5 (Data Types), §2 (MQTT Control Packet Format), §3 (MQTT Control Packets), §4 (Operational Behavior).

§Layer position

Layer 5 — bridges. Substrate for DDS↔MQTT endpoint mapping (IoT broker integration, cloud MQTT endpoints).

§Public API (Stand 1.0.0-rc.1)

§Example

use zerodds_mqtt_bridge::{encode_vbi, decode_vbi};

let buf = encode_vbi(268_435_455).expect("encode max VBI");
let (v, consumed) = decode_vbi(&buf).expect("decode");
assert_eq!(v, 268_435_455);
assert_eq!(consumed, 4);

Re-exports§

pub use codec::CodecError;
pub use codec::decode_publish;
pub use codec::decode_publish_v;
pub use codec::encode_publish;
pub use codec::encode_publish_v;
pub use control_packets::AckBody;
pub use control_packets::AuthBody;
pub use control_packets::ConnackBody;
pub use control_packets::ConnectBody;
pub use control_packets::DisconnectBody;
pub use control_packets::PropertyDataType;
pub use control_packets::SubackBody;
pub use control_packets::SubscribeBody;
pub use control_packets::Subscription;
pub use control_packets::UnsubackBody;
pub use control_packets::UnsubscribeBody;
pub use control_packets::decode_ack_body;
pub use control_packets::decode_auth_body;
pub use control_packets::decode_connack_body;
pub use control_packets::decode_connack_body_v;
pub use control_packets::decode_connect_body;
pub use control_packets::decode_connect_body_v;
pub use control_packets::decode_disconnect_body;
pub use control_packets::decode_suback_body;
pub use control_packets::decode_suback_body_v;
pub use control_packets::decode_subscribe_body;
pub use control_packets::decode_subscribe_body_v;
pub use control_packets::decode_unsuback_body;
pub use control_packets::decode_unsuback_body_v;
pub use control_packets::decode_unsubscribe_body;
pub use control_packets::decode_unsubscribe_body_v;
pub use control_packets::encode_ack_body;
pub use control_packets::encode_ack_body_v;
pub use control_packets::encode_auth_body;
pub use control_packets::encode_connack_body;
pub use control_packets::encode_connack_body_v;
pub use control_packets::encode_connect_body;
pub use control_packets::encode_connect_body_v;
pub use control_packets::encode_disconnect_body;
pub use control_packets::encode_disconnect_body_v;
pub use control_packets::encode_suback_body;
pub use control_packets::encode_suback_body_v;
pub use control_packets::encode_subscribe_body;
pub use control_packets::encode_subscribe_body_v;
pub use control_packets::encode_unsuback_body;
pub use control_packets::encode_unsuback_body_v;
pub use control_packets::encode_unsubscribe_body;
pub use control_packets::encode_unsubscribe_body_v;
pub use control_packets::property_data_type;
pub use data_types::decode_binary_data;
pub use data_types::decode_two_byte_int;
pub use data_types::decode_utf8_string;
pub use data_types::encode_binary_data;
pub use data_types::encode_two_byte_int;
pub use data_types::encode_utf8_string;
pub use packet::ControlPacketType;
pub use packet::FixedHeader;
pub use properties::Property;
pub use properties::PropertyId;
pub use properties::PropertyValueKind;
pub use vbi::decode_vbi;
pub use vbi::encode_vbi;
pub use vbi::vbi_size;
pub use version::ProtocolVersion;
pub use net::MqttClient;
pub use server::MqttBrokerServer;
pub use server::ServerHandle;
pub use broker::Broker;
pub use broker::DeliveryEnvelope;
pub use broker::QoS;
pub use broker::RetainedMessage;
pub use broker::Session;
pub use broker::Subscription as BrokerSubscription;
pub use broker::Will;
pub use dds_bridge::BridgeStats;
pub use dds_bridge::DdsDurability;
pub use dds_bridge::DdsReliability;
pub use dds_bridge::MqttDdsBridge;
pub use dds_bridge::TopicMapper;
pub use dds_bridge::dds_qos_to_mqtt;
pub use dds_bridge::forward_user_properties;
pub use dds_bridge::mqtt_qos_to_dds;
pub use keep_alive::KeepAliveTracker;
pub use reason_codes::ReasonCode;
pub use topic_filter::TopicFilterError;
pub use topic_filter::matches as topic_matches;
pub use topic_filter::validate_filter;
pub use topic_filter::validate_topic_name;

Modules§

broker
MQTT 5.0 broker logic — Spec §3 + §4.
codec
MQTT v5.0 PUBLISH-Packet Codec — Spec §3.3.
control_packets
MQTT v5.0 Control Packet Body Codecs — Spec §3.1-§3.15.
daemon
zerodds-mqtt-bridged daemon implementation.
data_types
MQTT v5.0 Data Types — §1.5.
dds_bridge
MQTT↔DDS topic bridge.
keep_alive
MQTT v5.0 Keep-Alive-Tracker — Spec §3.1.2.10.
net
std TCP framing + a lightweight version-aware MQTT client.
packet
MQTT Control Packet Types + Fixed Header — Spec §2.1.
properties
MQTT v5.0 Properties — Spec §2.2.2.
reason_codes
MQTT 5.0 Reason Codes — Spec §2.4.
server
Standalone MQTT broker server — Spec §4 (Operational Behavior).
topic_filter
MQTT Topic Filter Matching — Spec §4.7.
vbi
Variable Byte Integer — MQTT v5.0 §1.5.5.
version
MQTT protocol version (§3.1.2.2 Protocol Level).