12个版本
0.2.8 | 2019年10月6日 |
---|---|
0.2.7 | 2019年5月18日 |
0.2.6 | 2018年10月17日 |
0.2.4 | 2018年5月28日 |
0.1.2 | 2018年5月15日 |
#1458 in 编码
210 每月下载量
在 10 个 crate 中使用 (直接使用 6 个)
150KB
4K SLoC
protobuf_codec
基于 bytecodec crate 的 Protocol Buffers 编码器和解码器的Rust实现。
示例
一个用于在语言指南中定义的 SearchRequest
消息的编码器/解码器。
extern crate bytecodec;
extern crate protobuf_codec;
use bytecodec::EncodeExt;
use bytecodec::io::{IoDecodeExt, IoEncodeExt};
use protobuf_codec::field::{Fields, FieldDecoder, FieldEncoder, MaybeDefault};
use protobuf_codec::field::num::{F1, F2, F3};
use protobuf_codec::message::{MessageDecoder, MessageEncoder};
use protobuf_codec::scalar::{Int32Decoder, Int32Encoder, StringDecoder, StringEncoder};
// syntax = "proto3";
//
// message SearchRequest {
// string query = 1;
// int32 page_number = 2;
// int32 result_per_page = 3;
// }
type SearchRequestEncoder = MessageEncoder<
Fields<(
MaybeDefault<FieldEncoder<F1, StringEncoder>>,
MaybeDefault<FieldEncoder<F2, Int32Encoder>>,
MaybeDefault<FieldEncoder<F3, Int32Encoder>>,
)>,
>;
type SearchRequestDecoder = MessageDecoder<
Fields<(
MaybeDefault<FieldDecoder<F1, StringDecoder>>,
MaybeDefault<FieldDecoder<F2, Int32Decoder>>,
MaybeDefault<FieldDecoder<F3, Int32Decoder>>,
)>,
>;
fn main() {
let mut buf = Vec::new();
let mut encoder = SearchRequestEncoder::with_item(("foo".to_owned(), 3, 10)).unwrap();
encoder.encode_all(&mut buf).unwrap();
assert_eq!(buf, [10, 3, 102, 111, 111, 16, 3, 24, 10]);
let mut decoder = SearchRequestDecoder::default();
let message = decoder.decode_exact(&buf[..]).unwrap();
assert_eq!(message, ("foo".to_owned(), 3, 10));
}
参考
依赖
~1.5MB
~40K SLoC