#protobuf #serialization #codec #no-alloc #proto

无 std femtopb

一个用于 Protobuf 编码和解码的无 std、无分配的工具集

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 日

#993编码

Download history 1/week @ 2024-05-22 1/week @ 2024-06-05 2/week @ 2024-06-26 53/week @ 2024-07-03 3/week @ 2024-07-10 95/week @ 2024-07-17 23/week @ 2024-07-24 142/week @ 2024-07-31 455/week @ 2024-08-07 215/week @ 2024-08-14

每月 837 次下载

Apache-2.0

115KB
2.5K SLoC

femtopb

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

是的,您听对了:这个库允许您在不进行任何动态内存/堆分配的情况下序列化和反序列化 Protobuf 消息。

该库尽可能使用简单类型,并有限地使用泛型,以避免单一化代码大小爆炸。运行时还由许多微小的函数组成,以便未使用的函数可以被优化掉。

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

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

该库没有实现像 Protobuf 反射或已知类型等高级功能。为此,请使用 prost 包。在可能的情况下,建议使用 prost,仅在必要时才在平台中使用 femtopb

署名

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

依赖关系

~265–770KB
~18K SLoC