#protobuf #codec #proto #proto3 #low-level #protobuf3

无 std anybuf

一个最小化、零依赖的 proto3 编码器,用于编码任何内容

6 个版本 (破坏性)

0.5.0 2024 年 6 月 4 日
0.4.0 2024 年 2 月 10 日
0.3.0 2023 年 11 月 1 日
0.3.0-rc.12023 年 10 月 29 日
0.1.0 2023 年 4 月 28 日

#218编码

Download history 190/week @ 2024-04-28 102/week @ 2024-05-05 73/week @ 2024-05-12 153/week @ 2024-05-19 299/week @ 2024-05-26 343/week @ 2024-06-02 108/week @ 2024-06-09 957/week @ 2024-06-16 185/week @ 2024-06-23 218/week @ 2024-06-30 224/week @ 2024-07-07 380/week @ 2024-07-14 286/week @ 2024-07-21 477/week @ 2024-07-28 343/week @ 2024-08-04 700/week @ 2024-08-11

2,002 每月下载量
cw-ica-controller 中使用

Apache-2.0

115KB
1.5K SLoC

anybuf

anybuf on crates.io Docs

一个最小化、零依赖的 protobuf 编码器和解码器,用于编码/解码任何内容。它旨在创建 protobuf Anyvalue 字节,因此得名。

由于其底层设计,anybuf 允许您以多种方式出错,您应该对 protobuf 编码的工作原理有坚实的理解,以便更好地理解 API。

anybuf 包被分成两个主要组件

  • anybuf::Anybuf 是一个 protobuf 编码器
  • anybuf::Bufany 是一个 protobuf 解码器

非目标

支持

  • Varint 字段(bool/uint32/uint64/sint32/sint64/int32/int64)
  • 可变长度字段(字符串/字节)
  • 嵌套消息:只需附加一个 Anybuf 实例即可
  • 重复(bool/uint32/uint64/sint32/sint64/int32/int64/字符串/字节/消息)

尚未支持

如何使用它

编码

use anybuf::Anybuf;

let data = Anybuf::new()
    .append_uint64(1, 4)        // field number 1 gets value 4
    .append_string(2, "hello")  // field number 2 gets a string
    .append_bytes(3, b"hello")  // field number 3 gets bytes
    .append_message(4, &Anybuf::new().append_bool(3, true)) // field 4 gets a message
    .append_repeated_uint64(5, &[23, 56, 192])              // field number 5 is a repeated uint64
    .into_vec();                // done

// data is now a serialized protobuf document

解码

use anybuf::Bufany;

let deserialized = Bufany::deserialize(&data).unwrap(); // data from above
let id = deserialized.uint64(1).unwrap(); // 4
let title = deserialized.string(2).unwrap(); // "hello"

no_std 支持

从版本 0.5.0 开始,有一个默认的 std 功能。如果您删除它,库将使用 no_std 支持进行构建。由于 anybuf 维护者不需要 no_std 支持,因此这仅以最大努力为基础提供,可能存在缺陷。

[dependencies]
anybuf = { version = "0.5.0", default-features = false }

无运行时依赖