Crate protobuf_codec

Source
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 of protobuf_message_decoder!.
protobuf_message_field_encoder
Auxiliary macro used for expanding $field argument of protobuf_message_encoder!.
protobuf_message_oneof_field_decoder
Auxiliary macro used for expanding $oneof_field argument of protobuf_message_field_decoder!.
protobuf_message_oneof_field_encoder
Auxiliary macro used for expanding $oneof_field argument of protobuf_message_field_encoder!.