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