#prost-build #protoc #proto #编译 #protobuf #生成 #缓冲区

informalsystems-prost-build

基于分支发布的版本,直到上游更新

1个不稳定版本

0.8.1 2021年10月6日

#10 in #prost-build


用于 informalsystems-tonic-bui…

Apache-2.0

26MB
5.5K SLoC

包含 (Mach-o可执行文件,12MB) third-party/protobuf/protoc-osx-x86_64,(ELF可执行文件/库,6MB) protoc-linux-aarch_64,(ELF可执行文件/库,5MB) third-party/protobuf/protoc-linux-x86_32,(ELF可执行文件/库,5MB) third-party/protobuf/protoc-linux-x86_64,(Mach-o可执行文件,5.5MB) third-party/protobuf/protoc-osx-aarch64,(DOS可执行文件,2.5MB) third-party/protobuf/protoc-win32.exe

Documentation Crate

prost-build

prost-build 可以在Cargo构建过程中轻松地将 .proto 文件生成Rust代码。有关如何将 prost-build 集成到Cargo项目中的示例,请参阅文档

许可证

prost-build 在Apache许可证(版本2.0)的条款下分发。

有关详细信息,请参阅LICENSE

版权所有 2017 Dan Burkert


lib.rs:

prost-build.proto 文件编译成Rust。

prost-build 设计用于在Cargo构建脚本中作为构建时代码生成的一部分。

示例

让我们创建一个名为 snazzy 的小型crate,它在protobuf文件中定义了一个新项目的集合。

$ cargo new snazzy && cd snazzy

首先,将 prost-buildprost 及其公共依赖项添加到 Cargo.toml 中(有关当前版本,请参阅crates.io

[dependencies]
bytes = <bytes-version>
prost = <prost-version>

[build-dependencies]
prost-build = { version = <prost-version> }

接下来,将 src/items.proto 添加到项目中

syntax = "proto3";

package snazzy.items;

// A snazzy new shirt!
message Shirt {
    enum Size {
        SMALL = 0;
        MEDIUM = 1;
        LARGE = 2;
    }

    string color = 1;
    Size size = 2;
}

要生成从 items.proto 的Rust代码,我们在crate的 build.rs 构建脚本中使用 prost-build

use std::io::Result;
fn main() -> Result<()> {
    prost_build::compile_protos(&["src/items.proto"], &["src/"])?;
    Ok(())
}

最后,在 lib.rs 中包含生成的代码

// Include the `items` module, which is generated from items.proto.
pub mod items {
    include!(concat!(env!("OUT_DIR"), "/snazzy.items.rs"));
}

pub fn create_large_shirt(color: String) -> items::Shirt {
    let mut shirt = items::Shirt::default();
    shirt.color = color;
    shirt.set_size(items::shirt::Size::Large);
    shirt
}

就是这些!运行 cargo doc 查看生成的代码的文档。完整的示例项目可以在 GitHub 上找到。

源码 protoc

prost-build 依赖于 Protocol Buffers 编译器,protoc,将 .proto 文件解析成可以转换成 Rust 的表示形式。如果已设置,prost-build 使用 PROTOCPROTOC_INCLUDE 环境变量来定位 protoc 和 Protobuf 包含目录。例如,在 macOS 系统上,如果使用 Homebrew 安装了 Protobuf,可以将环境设置为

PROTOC=/usr/local/bin/protoc
PROTOC_INCLUDE=/usr/local/include

在典型的 Linux 安装中

PROTOC=/usr/bin/protoc
PROTOC_INCLUDE=/usr/include

如果环境中没有找到 PROTOC,则使用 prost-build crate 中捆绑的预编译 protoc 二进制文件。预编译的 protoc 二进制文件适用于 Linux(非 musl)、macOS 和 Windows 系统。如果主机平台没有可用的预编译 protoc,则使用 PATH 上的 protocprotoc.exe 二进制文件。如果在这些后备位置中没有找到 protoc,则构建失败。

如果环境中没有找到 PROTOC_INCLUDE,则使用 prost-build crate 中捆绑的 Protobuf 包含目录。

要强制 prost-build 使用 PATH 上的 protoc,请在环境中添加 PROTOC=protoc

依赖项

~8–18MB
~251K SLoC