6 个版本 (1 个稳定版本)

1.0.0 2020年3月31日
1.0.0-rc.32020年3月25日
1.0.0-rc.22020年3月13日
1.0.0-rc.12020年2月7日
0.13.0-rc.22019年12月4日

#21#exonum

Download history 68/week @ 2024-03-11 70/week @ 2024-03-18 250/week @ 2024-03-25 119/week @ 2024-04-01 57/week @ 2024-04-08 85/week @ 2024-04-15 76/week @ 2024-04-22 62/week @ 2024-04-29 71/week @ 2024-05-06 63/week @ 2024-05-13 73/week @ 2024-05-20 42/week @ 2024-05-27 44/week @ 2024-06-03 39/week @ 2024-06-10 49/week @ 2024-06-17 53/week @ 2024-06-24

每月 188 次下载
用于 14 个 crate (10 个直接使用)

Apache-2.0

32KB
497

Exonum 的高层 Protobuf 转换库

Travis Build Status License: Apache-2.0 rust 1.42.0+ required

exonum-proto 为与 protoc-rust crate 生成的代码交互提供了一个高级接口。

该 crate 的核心是 ProtobufConvert 特性。

该特性的主要目的是允许用户在他们自己的类型和从 .proto 描述生成的类型之间创建映射,同时提供对 Protobuf 数据的额外验证机制。

大多数情况下,您不需要实现此特性,因为大多数用例都由来自 exonum-derive crate 的 #[derive(ProtobufConvert)] 的特性覆盖。

一个典型的具有验证的映射示例是手动实现 exonum_crypto::Hash 的此特性。 exonum_crypto::Hash 是一个固定大小的字节数组,但 Protobuf 不允许我们表达此约束,因为仅支持动态大小的数组。

如果您想将 Hash 作为您 Protobuf 结构的一部分使用,您需要编写一个从 Protobuf proto::Hash(字节数组动态大小)到exonum_crypto::Hash 的转换函数,并在需要使用 exonum_crypto::Hash 时调用它。

为 Hash 提供的 ProtobufConvert 实现允许您将此字段嵌入到您的结构中,并使用 #[derive(ProtobufConvert)] 生成对其的 ProtobufConvert,这将根据 Hash 的验证函数验证您的结构。

有关更多详细信息,请参阅 crate 文档

示例

Protobuf 往返示例

use exonum_proto::ProtobufConvert;
use bit_vec::BitVec;

let bit_vector = BitVec::from_bytes(&[0b_1010_0000, 0b_0001_0010]);
let bit_vector_pb = bit_vector.to_pb();
let deserialized_bit_vector: BitVec = ProtobufConvert::from_pb(pb_bv).unwrap();
assert_eq!(bit_vector, deserialized_bit_vector);

用法

exonum-proto 作为依赖项包含在您的 Cargo.toml

[dependencies]
exonum-proto = "1.0.0"

许可证

exonum-proto 根据 Apache 许可证(版本 2.0)授权。有关详细信息,请参阅 LICENSE

依赖项

~5–7MB
~125K SLoC