Crate protobuf_codec [] [src]

Encoders and decoders for Protocol Buffers based on bytecodec crate.

Limitation

The current version does not support to merge duplicate messages. Alghtough it is required by The guide, protobuf_codec simply select 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!.