#protobuf #api #path #input

build protoc-rust

protoc --rust_out=... available as API. protoc needs to be in $PATH, protoc-gen-run does not.

81 stable releases

3.0.0-alpha.2 Nov 1, 2021
2.28.0 Sep 26, 2022
2.27.1 Feb 5, 2022
2.25.2 Oct 24, 2021
1.4.1 Jun 24, 2017

#450 in #path

Download history 2998/week @ 2025-12-27 4902/week @ 2026-01-03 5153/week @ 2026-01-10 5926/week @ 2026-01-17 6782/week @ 2026-01-24 7548/week @ 2026-01-31 6377/week @ 2026-02-07 5744/week @ 2026-02-14 6911/week @ 2026-02-21 9267/week @ 2026-02-28 16206/week @ 2026-03-07 9349/week @ 2026-03-14 9303/week @ 2026-03-21 9983/week @ 2026-03-28 8880/week @ 2026-04-04 8807/week @ 2026-04-11

38,804 downloads per month
Used in fewer than 54 crates

MIT license

230KB
5.5K SLoC

API to generate .rs files.

This API requires protoc command present in $PATH or passed explicitly to Codegen object.

extern crate protoc_rust;

fn main() {
    protoc_rust::Codegen::new()
        .out_dir("src/protos")
        .inputs(&["protos/a.proto", "protos/b.proto"])
        .include("protos")
        .run()
        .expect("Running protoc failed.");
}

It is advisable that protoc-rust build-dependecy version be the same as protobuf dependency.

The alternative is to use protobuf-codegen-pure.


API to generate .rs files

API to generate .rs files to be used e. g. from build.rs.

Example code:

extern crate protoc_rust;

use protoc_rust::Customize;

fn main() {
    protoc_rust::Codegen::new()
        .out_dir("src/protos")
        .inputs(&["protos/a.proto", "protos/b.proto"])
        .include("protos")
        .run()
        .expect("protoc");
}

And in Cargo.toml:

[build-dependencies]
protoc-rust = "2.0"

Note 1: This API requires protoc command present in $PATH. Although protoc-gen-rust command is not needed.

Note 2: Is advisable that protoc-rust build-dependecy version be the same as protobuf dependency.

The alternative is to use pure-rust .proto parser and code generator.

Dependencies

~4–18MB
~243K SLoC