protobuf_codec

protobuf_codec Documentation Build Status Code Coverage License: MIT

A Rust implementation of encoders and decoders for Protocol Buffers based on [bytecodec] crate.

Documentation

Examples

An encoder/decoder for SearchRequest message defined in the Language Guide.

``` extern crate bytecodec; extern crate protobuf_codec;

use bytecodec::EncodeExt; use bytecodec::io::{IoDecodeExt, IoEncodeExt}; use protobufcodec::field::{Fields, OptionalFieldDecoder, OptionalFieldEncoder}; use protobufcodec::field::num::{F1, F2, F3}; use protobufcodec::message::{MessageDecoder, MessageEncoder}; use protobufcodec::scalar::{Int32Decoder, Int32Encoder, StringDecoder, StringEncoder};

// syntax = "proto3"; // // message SearchRequest { // string query = 1; // int32 pagenumber = 2; // int32 resultper_page = 3; // } type SearchRequestEncoder = MessageEncoder< Fields<( OptionalFieldEncoder, OptionalFieldEncoder, OptionalFieldEncoder, )>,

; type SearchRequestDecoder = MessageDecoder< Fields<( OptionalFieldDecoder, OptionalFieldDecoder, OptionalFieldDecoder, )>, ;

fn main() { let mut buf = Vec::new(); let mut encoder = SearchRequestEncoder::withitem(("foo".toowned(), 3, 10)).unwrap(); encoder.encodeall(&mut buf).unwrap(); asserteq!(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