#protobuf #proto #no-alloc #message

无std femtopb-derive

femtopb 特性提供派生宏

12个不稳定版本 (3个破坏性更新)

0.5.0 2024年8月1日
0.4.5 2024年4月19日
0.3.0 2024年4月4日
0.2.0 2024年4月3日
0.1.4 2024年4月3日

#proto 中排名第118

Download history 5/week @ 2024-05-19 1/week @ 2024-06-02 4/week @ 2024-06-09 1/week @ 2024-06-16 18/week @ 2024-06-30 36/week @ 2024-07-07 39/week @ 2024-07-14 84/week @ 2024-07-21 111/week @ 2024-07-28 394/week @ 2024-08-04 96/week @ 2024-08-11 209/week @ 2024-08-18

每月下载量811
用于 femtopb

Apache-2.0

66KB
1.5K SLoC

femtopb

一个小型内存占用,#[no_std],无内存分配、无panic的Protobuf序列化库。这允许您在资源受限的平台(如内存非常有限的裸机MCU)上使用Protobuf进行通信。

是的,您没有听错:这个库可以让您在不进行任何动态内存/堆分配的情况下序列化和反序列化Protobuf消息。

当可能时,库会使用简单类型并尽可能少地使用泛型,以避免代码大小爆炸。运行时也由许多小程序组成,以便未使用的程序可以得到优化。

在测试此crate时,会进行检查以确保 femtopb 代码不会panic。如果您想利用无panic检查来自动调试自己的项目,请启用 assert-no-panic crate功能。对于发布代码,启用此功能可能不是一个好主意,因为启用此功能可能会略微更改生成的代码。

然而,也有一些限制。消息必须从连续的 &[u8] 切片中反序列化,因此不支持从其他 bytes::Buf 类型或流/文件/套接字/... 的增量反序列化。此外,消息在其生存期内借用其源切片。重复字段的反序列化是懒加载的,以避免需要动态分配类似于 Vec 的数据结构。

此库不实现高级功能,如Protobuf反射或已知类型等。为此,请使用 prost crate。对于可能使用 prost 的应用程序,建议使用 prost,仅在必要时在 femtopb 上使用。

归属

该API深受prost软件包的启发,该软件包采用Apache 2.0许可证。一些测试和关键算法也来自该软件包。此软件包也采用Apache 2.0许可证。

依赖项

~225–660KB
~16K SLoC