Expand description
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
$field
argument ofprotobuf_message_decoder!
. - protobuf_
message_ field_ encoder - Auxiliary macro used for expanding
$field
argument ofprotobuf_message_encoder!
. - protobuf_
message_ oneof_ field_ decoder - Auxiliary macro used for expanding
$oneof_field
argument ofprotobuf_message_field_decoder!
. - protobuf_
message_ oneof_ field_ encoder - Auxiliary macro used for expanding
$oneof_field
argument ofprotobuf_message_field_encoder!
.