1个不稳定版本
| 0.8.1 | 2021年10月6日 |
|---|
#10 in #prost-build
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
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-build、prost 及其公共依赖项添加到 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 使用 PROTOC 和 PROTOC_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 上的 protoc 或 protoc.exe 二进制文件。如果在这些后备位置中没有找到 protoc,则构建失败。
如果环境中没有找到 PROTOC_INCLUDE,则使用 prost-build crate 中捆绑的 Protobuf 包含目录。
要强制 prost-build 使用 PATH 上的 protoc,请在环境中添加 PROTOC=protoc。
依赖项
~8–18MB
~251K SLoC