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 编码
每月 1,480 次下载
用于 8 个 crate (4 个直接使用)
81KB
1.5K SLoC
Rust Mqtt 编码与解码
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