如何在 Rust 中使用 prost 生成代码?
How to generate codes using prost in rust?
我不知道如何使用 prost_build
生成代码
我看过文档,但是没有给出生成代码的详细命令。
我输入 cargo build
但没有生成代码。
我的build.rs
extern crate prost_build;
fn main() {
prost_build::compile_protos(&["src/items.proto"],
&["src/"]).unwrap();
}
我的Cargo.toml
[package]
name = "snazzy"
version = "0.1.0"
authors = ["xxx <xxx@xxx.com>"]
edition = "2018"
build = "build.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
bytes = "0.4"
prost = "0.5"
[build-dependencies]
prost-build = { version = "0.4" }
我的items.proto
syntax = "proto3";
package snazzy.items;
message Shirt {
enum Size {
SMALL = 0;
MEDIUM = 1;
LARGE = 2;
}
string color = 1;
Size size = 2;
}
我的文件树:
.
├── build.rs
├── Cargo.lock
├── Cargo.toml
└── src
├── items.proto
└── main.rs
没有构建错误,但我看不到生成的代码在哪里。
任何帮助将不胜感激!
你是对的,这在文档中没有很好地解释,这是因为构建脚本的工作方式。嗯,部分。
您的 protobuf 实现在 target/{yourArch}/build/{yourCrateName}-{hash}/out
.
下
如果没有环境变量,这将非常难以实现。文档的重要部分是以下代码片段突出显示了包含内容:
pub mod items {
include!(concat!(env!("OUT_DIR"), "/snazzy.items.rs"));
}
这包括OUT_DIR
处可用的文件(上面指定的目录,编译时自动填写)和protobuf实现的名称(你在protobuf文件中的包名),并使它的所有内容crate::items
.
下可用的结构
将文件驻留在构建目录中是有意义的,因为它们是构建产物。在你的箱子的 src
文件夹中生成代码会导致混乱,无论是在版本控制还是项目完整性方面(你会有重复的信息,并且 protobuf 实现,只要它是理智的,是那 对你很重要。但是,功能蓝图很重要)。
我不知道如何使用 prost_build
我看过文档,但是没有给出生成代码的详细命令。
我输入 cargo build
但没有生成代码。
我的build.rs
extern crate prost_build;
fn main() {
prost_build::compile_protos(&["src/items.proto"],
&["src/"]).unwrap();
}
我的Cargo.toml
[package]
name = "snazzy"
version = "0.1.0"
authors = ["xxx <xxx@xxx.com>"]
edition = "2018"
build = "build.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
bytes = "0.4"
prost = "0.5"
[build-dependencies]
prost-build = { version = "0.4" }
我的items.proto
syntax = "proto3";
package snazzy.items;
message Shirt {
enum Size {
SMALL = 0;
MEDIUM = 1;
LARGE = 2;
}
string color = 1;
Size size = 2;
}
我的文件树:
.
├── build.rs
├── Cargo.lock
├── Cargo.toml
└── src
├── items.proto
└── main.rs
没有构建错误,但我看不到生成的代码在哪里。 任何帮助将不胜感激!
你是对的,这在文档中没有很好地解释,这是因为构建脚本的工作方式。嗯,部分。
您的 protobuf 实现在 target/{yourArch}/build/{yourCrateName}-{hash}/out
.
如果没有环境变量,这将非常难以实现。文档的重要部分是以下代码片段突出显示了包含内容:
pub mod items {
include!(concat!(env!("OUT_DIR"), "/snazzy.items.rs"));
}
这包括OUT_DIR
处可用的文件(上面指定的目录,编译时自动填写)和protobuf实现的名称(你在protobuf文件中的包名),并使它的所有内容crate::items
.
将文件驻留在构建目录中是有意义的,因为它们是构建产物。在你的箱子的 src
文件夹中生成代码会导致混乱,无论是在版本控制还是项目完整性方面(你会有重复的信息,并且 protobuf 实现,只要它是理智的,是那 对你很重要。但是,功能蓝图很重要)。