#protobuf #json-rpc #json

pbjsonrpc-build

Generates jsonrpsee trait for prost message types

11 unstable releases

new 0.24.1 Nov 6, 2024
0.18.1 Jan 5, 2024
0.18.0 Oct 20, 2023
0.17.0 Apr 20, 2023
0.0.3 Jun 4, 2022

#375 in Encoding


Used in 2 crates (via lebai-proto)

MIT license

43KB
1K SLoC

Pbjsonrpc-build

Automatically generate jsonrpsee Trait for auto-generated prost types.

Usage

[dependencies]
pbjson = "0.3"
pbjson-types = "0.3"
prost = "0.10"
prost-types = "0.10"

[build-dependencies]
pbjson-build = "0.3"
pbjsonrpc-build = "0"
prost-build = "0.10"

Next create a build.rs containing the following

let root = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("protos");
let proto_files = vec![root.join("myproto.proto")];

// Tell cargo to recompile if any of these proto files are changed
for proto_file in &proto_files {
    println!("cargo:rerun-if-changed={}", proto_file.display());
}

let descriptor_path = PathBuf::from(env::var("OUT_DIR").unwrap())
    .join("proto_descriptor.bin");

prost_build::Config::new()
    // Save descriptors to file
    .file_descriptor_set_path(&descriptor_path)
    // Override prost-types with pbjson-types
    .compile_well_known_types()
    .extern_path(".google.protobuf", "::pbjson_types")
    // Generate prost structs
    .compile_protos(&proto_files, &[root])?;

let descriptor_set = std::fs::read(descriptor_path)?;
pbjson_build::Builder::new()
    .register_descriptors(&descriptor_set)?
    .build(&[".mypackage"])?;
pbjsonrpc_build::Builder::new()
    .register_descriptors(&descriptor_set)?
    .build(&[".mypackage"])?;

Finally within lib.rs

/// Generated by [`prost-build`]
include!(concat!(env!("OUT_DIR"), "/mypackage.rs"));
/// Generated by [`pbjson-build`]
include!(concat!(env!("OUT_DIR"), "/mypackage.serde.rs"));
/// Generated by [`pbjsonrpc-build`]
include!(concat!(env!("OUT_DIR"), "/mypackage.jsonrpc.rs"));

Dependencies

~1MB
~16K SLoC