6 个版本 (1 个稳定版本)
1.0.0 | 2020年3月31日 |
---|---|
1.0.0-rc.3 | 2020年3月25日 |
1.0.0-rc.2 | 2020年3月13日 |
1.0.0-rc.1 | 2020年2月7日 |
0.13.0-rc.2 | 2019年12月4日 |
#21 在 #exonum
每月 188 次下载
用于 14 个 crate (10 个直接使用)
32KB
497 行
Exonum 的高层 Protobuf 转换库
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