#protobuf #prost #serde

prost-helper

A set of prost helper functions to make prost generated code easy to work with

10 releases (5 breaking)

0.6.0 Nov 25, 2021
0.5.0 Feb 28, 2021
0.4.0 Feb 23, 2021
0.3.0 Feb 22, 2021
0.1.3 Feb 22, 2021

#186 in Development tools

Download history 27/week @ 2021-09-25 11/week @ 2021-10-02 56/week @ 2021-10-09 30/week @ 2021-10-16 79/week @ 2021-10-23 8/week @ 2021-10-30 23/week @ 2021-11-06 6/week @ 2021-11-13 30/week @ 2021-11-20 15/week @ 2021-11-27 35/week @ 2021-12-04 16/week @ 2021-12-11 12/week @ 2021-12-18 6/week @ 2021-12-25 26/week @ 2022-01-01 24/week @ 2022-01-08

70 downloads per month
Used in 2 crates

MIT license

16KB
365 lines

prost-helper

Two crates are provided to facilitate prost to better work with protobuf:

  • prost-serde: help you to generate serde compatible code with prost and protobuf files. More in documentation.
  • prost-helper: macros and functions to facilitate prost. More in documentation.

Using prost-helper in a Cargo Project

First, add prost-serde and prost-helper to your Cargo.toml:

[dependencies]
prost-helper = "0.1"

[build-dependencies]
prost-serde = "0.1"

Then copy the default_build_config.json to your project and customize it. See more information in prost-serde/examples/build_config.json. Then you could add this in your build.rs:

fn main() {
    let json = include_str!("path/to/your/build_config.json");
    build_with_serde(json);
}

That's it!

If you'd like to generate the implementation for From trait to Vec<u8>, or TryFrom trait from Vec<u8> to protobuf data structure, you could use prost_into_vec! and vec_try_into_prost! macros. Here is an example:

use prost::Message;
use std::convert::TryInto;

#[derive(Clone, PartialEq, Message)]
pub struct Hello {
    #[prost(string, tag = "1")]
    pub msg: String,
}

// implement the traits
prost_into_vec!(Hello, 32);
vec_try_into_prost!(Hello);


let hello = Hello::default();

// use `Into` to convert message to `Vec<u8>`
let data: Vec<u8> = hello.into();

// use `TryInto` to convert `Vec<u8>` back to message
let hello_result: Result<Hello, prost::DecodeError> = data.try_into();

Have fun with prost!

License

prost-helper is distributed under the terms of MIT.

See LICENSE for details.

Copyright 2021 Tyr Chen

Dependencies

~1.2–2MB
~42K SLoC