11次发布

0.3.1 2024年8月14日
0.3.0 2024年8月14日
0.2.1 2024年8月9日
0.1.6 2024年7月21日
0.1.5 2024年5月17日

#102 in WebAssembly

Download history 368/week @ 2024-04-30 30/week @ 2024-05-07 134/week @ 2024-05-14 42/week @ 2024-05-21 6/week @ 2024-05-28 7/week @ 2024-06-04 15/week @ 2024-06-11 20/week @ 2024-06-18 30/week @ 2024-06-25 19/week @ 2024-07-02 133/week @ 2024-07-16 27/week @ 2024-07-23 19/week @ 2024-07-30 221/week @ 2024-08-06

每月400次下载
用于 open-vector-tile

MIT 许可证

46KB
1K SLoC

pbf-rs docs-rust

pbf Rust crate提供了读取和写入Protocol Buffers (protobuf)消息的功能。这是一个无依赖项的包,使用no_std,旨在用于嵌入式系统和WASM应用程序。该crate设计得小巧高效,牺牲了一些功能和灵活性。用户需要创建必要的数据结构并实现ProtoReadProtoWrite特质,以有效地使用它。

用法

将以下内容添加到您的Cargo.toml

[dependencies]
pbf = "0.1"

示例

use pbf::{ProtoRead, ProtoWrite, Protobuf, Field, Type};

#[derive(Default)]
struct TestMessage {
    a: i32,
    b: String,
}
impl TestMessage {
    fn new(a: i32, b: &str) -> Self {
        TestMessage { a, b: b.to_owned() }
    }
}
impl ProtoWrite for TestMessage {
    fn write(&self, pb: &mut Protobuf) {
        pb.write_varint_field::<u64>(1, self.a as u64);
        pb.write_string_field(2, &self.b);
    }
}
impl ProtoRead for TestMessage {
    fn read(&mut self, tag: u64, pb: &mut Protobuf) {
        println!("tag: {}", tag);
        match tag {
            1 => self.a = pb.read_varint::<i32>(),
            2 => self.b = pb.read_string(),
            _ => panic!("Invalid tag"),
        }
    }
}

let mut pb = Protobuf::new();
let msg = TestMessage::new(1, "hello");
pb.write_message(1, &msg);

let bytes = pb.take();
let mut pb = Protobuf::from_input(RefCell::new(bytes));

// first read in the field for the message
let field = pb.read_field();
assert_eq!(
    field,
    Field {
        tag: 1,
        r#type: Type::Bytes
    }
);

let mut msg = TestMessage::default();
pb.read_message(&mut msg);
assert_eq!(msg.a, 1);
assert_eq!(msg.b, "hello");

开发

要求

您需要tarpaulin工具来生成覆盖率报告。使用以下命令安装它

cargo install cargo-tarpaulin

bacon coverage工具用于生成覆盖率报告。要使用pycobertura包生成更美观的覆盖率报告,使用以下命令安装它

pip install pycobertura

运行测试

要运行测试,请使用以下命令

cargo test
# bacon
bacon test

生成覆盖率报告

要生成覆盖率报告,请使用以下命令

cargo tarpaulin
# bacon
bacon coverage # or type `l` inside the tool

无运行时依赖项