#protobuf #serialization #buffer #protocols #no-alloc #experimental #memory

no-std noproto

嵌入式系统使用的无std、无分配的协议缓冲区实现

2个不稳定版本

0.1.0 2023年12月20日
0.0.0 2023年6月15日

#115 in #experimental

Download history 10/week @ 2024-04-08 29/week @ 2024-04-15 14/week @ 2024-04-22 3/week @ 2024-04-29 10/week @ 2024-05-06 14/week @ 2024-05-13 21/week @ 2024-05-20 10/week @ 2024-05-27 24/week @ 2024-06-03 25/week @ 2024-06-10 10/week @ 2024-06-17 21/week @ 2024-06-24 3/week @ 2024-07-01 13/week @ 2024-07-08 15/week @ 2024-07-15 34/week @ 2024-07-22

每月68次下载
用于embassy-net-esp-hosted

MIT/Apache

25KB
526

noproto

noproto 是Rust中用于嵌入式系统的无std、无分配的协议缓冲区(protobuf)实现。优化了二进制大小和内存使用,而不是性能。

状态:非常实验性,☢️,请勿在生产环境中使用。特别是,它不能很好地处理许多protobuf类型(见下文)。

功能

实现

  • Derive宏。
  • heapless::Vecheapless::String实现。
  • 可选
  • 重复
  • oneof
  • 枚举

未实现(?)

  • 支持多种protobuf编码。Protobuf "类型"更像是"类型 + 传输编码"的结合,所以一个Rust类型可以在传输线上以多种方式编码。noproto目前假设Rust类型足以推断出它在传输线上应该如何编码,这是不正确的。
  • 支持更多类型(见下文)
  • alloc容器实现(目标是无分配,但我们仍然可以选择性地实现它们)。
  • 为重复字段实现&[T](仅限写入,不限于读取)
  • .proto文件编译成Rust代码的工具。
  • 映射
  • 弃用的字段组。

类型映射

Protobuf Rust
bool bool
int32 TODO
uint32 u32
sint32 i32
fixed32 TODO
sfixed32 TODO
int64 TODO
uint64 u64
sint64 i64
fixed64 TODO
sfixed64 TODO
float TODO
double TODO
string heapless::String<N>
bytes heapless::Vec<u8, N>

最低支持的Rust版本(MSRV)

noproto保证在发布时的最新稳定Rust版本上编译。它可能可以用较旧的版本编译,但这可能在任何新的补丁版本中改变。

许可证

此作品根据以下之一授权

由您选择。

依赖项

~440–780KB
~17K SLoC