5个版本 (3个重大更改)
0.4.0 | 2024年6月13日 |
---|---|
0.3.0 | 2023年11月1日 |
0.2.0 | 2023年6月22日 |
0.1.1 | 2022年12月6日 |
0.1.0 | 2022年3月28日 |
#626 in 嵌入式开发
每月41次下载
用于 booster
19KB
295 代码行
minireq
基于MQTT的请求/响应库
lib.rs
:
MQTT请求/响应处理
概述
该库旨在提供一种简单的方式来自动处理传入请求。
可以将处理函数与库关联,以便在接收到指定的请求时自动调用,处理函数将自动使用请求数据调用。
限制
-
由于需要与RTIC和未锁定资源兼容,`poll` 函数具有一个有些奇怪的签名(使用一个函数来提供 `Context` 并调用处理函数)。
-
处理函数只能是未捕获任何局部资源的闭包。相反,将局部捕获移动到 `Context` 中,该 `Context` 将在函数调用中提供给处理函数。
示例
use embedded_io::Write;
#[derive(Copy, Clone)]
struct Context {}
#[derive(serde::Serialize, serde::Deserialize)]
struct Request {
data: u32,
}
// Handler function for processing an incoming request.
pub fn handler(
context: &mut Context,
cmd: &str,
data: &[u8],
mut output_buffer: &mut [u8]
) -> Result<usize, minireq::NoErrors> {
// Deserialize the request.
let mut request: Request = serde_json_core::from_slice(data).unwrap().0;
let response = request.data.wrapping_add(1);
let start = output_buffer.len();
write!(output_buffer, "{}", response).unwrap();
Ok(start - output_buffer.len())
}
let mqtt: minimq::Minimq<'_, _, _, minimq::broker::IpBroker> = minireq::minimq::Minimq::new(
// Constructor
);
// Construct the client
let mut handlers = [None; 10];
let mut client: minireq::Minireq<Context, _, _, _> = minireq::Minireq::new(
"prefix/device",
mqtt,
&mut handlers[..],
)
.unwrap();
// Whenever the `/test` command is received, call the associated handler.
// You may add as many handlers as you would like.
client.register("/test", handler).unwrap();
// ...
loop {
// In your main execution loop, continually poll the client to process incoming requests.
client.poll(|handler, command, data, buffer| {
let mut context = Context {};
handler(&mut context, command, data, buffer)
}).unwrap();
}
依赖项
~3.5MB
~75K SLoC