8个版本

0.4.1 2021年5月26日
0.4.0 2020年12月1日
0.3.0 2020年3月23日
0.2.0 2019年10月25日
0.1.0 2019年2月24日

#545 in 编码

Download history 471/week @ 2024-03-13 798/week @ 2024-03-20 464/week @ 2024-03-27 273/week @ 2024-04-03 553/week @ 2024-04-10 330/week @ 2024-04-17 479/week @ 2024-04-24 746/week @ 2024-05-01 334/week @ 2024-05-08 335/week @ 2024-05-15 202/week @ 2024-05-22 137/week @ 2024-05-29 129/week @ 2024-06-05 159/week @ 2024-06-12 185/week @ 2024-06-19 966/week @ 2024-06-26

每月 1,480 次下载
用于 8 crate (4 个直接使用)

Apache-2.0

81KB
1.5K SLoC

Rust Mqtt 编码与解码 Crates.io Docs.rs

Mqttrs 是一个用于编写 MQTT协议 客户端和服务器端的 Rust crate (库)。

这是一个仅包含编解码器(codec)的库,具有非常少的依赖和简单易用的API,可以与rust的标准库或异步框架如 tokio 一起使用。它在解码(例如,遇到保留值时返回错误)和编码时非常严格(API使得生成非法数据包成为不可能)。

Mqttrs 目前需要 Rust >= 1.39 并支持 MQTT 3.1.1。计划在未来版本中支持 MQTT 5

用法

mqttrs = "0.4"bytes = "1.0" 添加到您的 Cargo.toml 文件中。

use mqttrs::*;
use bytes::BytesMut;

// Allocate write buffer.
let mut buf = BytesMut::with_capacity(1024);

// Encode an MQTT Connect packet.
let pkt = Packet::Connect(Connect { protocol: Protocol::MQTT311,
                                    keep_alive: 30,
                                    client_id: "doc_client".into(),
                                    clean_session: true,
                                    last_will: None,
                                    username: None,
                                    password: None });
assert!(encode(&pkt, &mut buf).is_ok());
assert_eq!(&buf[14..], "doc_client".as_bytes());
let mut encoded = buf.clone();

// Decode one packet. The buffer will advance to the next packet.
assert_eq!(Ok(Some(pkt)), decode(&mut buf));

// Example decode failures.
let mut incomplete = encoded.split_to(10);
assert_eq!(Ok(None), decode(&mut incomplete));
let mut garbage = BytesMut::from(&[0u8,0,0,0] as &[u8]);
assert_eq!(Err(Error::InvalidHeader), decode(&mut garbage));

可选的 serde 支持。

在您的 Cargo.toml 中使用 mqttrs = { version = "0.4", features = [ "derive" ] }

启用此功能将 #[derive(Deserialize, Serialize)] 添加到一些 mqttrs 类型中。这简化了将这些结构体存储在数据库或文件中的操作,通常用于实现会话支持(qos、订阅等)。

这不会将 mqtt 添加为 serde 数据格式;您仍然需要使用 mqttrs::{decode,encode} 函数。

可选的 #[no_std] 支持。

使用 mqttrs = { version = "0.4", default-features = false } 在您的 Cargo.toml 中移除默认的 std 功能。

禁用此功能将导致不实现 std::error::Error 特性,以及不支持 std::io 读写。这允许在标准库不可用的嵌入式设备中使用。

依赖项

~0.6–0.9MB
~17K SLoC