[−][src]Crate protobuf_codec
Encoders and decoders for Protocol Buffers based on bytecodec crate.
Limitation
The current version does not support to merge duplicate messages.
Although it is required by the guide,
protobuf_codec
simply selects the last message instance of the same singular field.
Examples
An encoder/decoder for SearchRequest
message defined in the Language Guide.
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>>, )>, >; 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));
References
Modules
field | Encoders, decoders and related components for message fields. |
message | Encoders, decoders and traits for messages. |
scalar | Encoders and decoders for scalar values. |
wellknown | Encoders and decoders for the well-known protocol buffer messages. |
wire | Encoders and decoders and related components for values used in the binary wire format. |
Macros
protobuf_message_decoder | Macro for creating an instance of a message decoder. |
protobuf_message_encoder | Macro for creating an instance of a message encoder. |
protobuf_message_field_decoder | Auxiliary macro used for expanding |
protobuf_message_field_encoder | Auxiliary macro used for expanding |
protobuf_message_oneof_field_decoder | Auxiliary macro used for expanding |
protobuf_message_oneof_field_encoder | Auxiliary macro used for expanding |