Crate protobuf_codec [] [src]

Encoders and decoders for Protocol Buffers based on bytecodec crate.

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, OptionalFieldDecoder, OptionalFieldEncoder};
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<(
        OptionalFieldEncoder<F1, StringEncoder>,
        OptionalFieldEncoder<F2, Int32Encoder>,
        OptionalFieldEncoder<F3, Int32Encoder>,
    )>,
>;
type SearchRequestDecoder = MessageDecoder<
    Fields<(
        OptionalFieldDecoder<F1, StringDecoder>,
        OptionalFieldDecoder<F2, Int32Decoder>,
        OptionalFieldDecoder<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.

wire

Encoders and decoders and related components for values used in the binary wire format.