gpt4 book ai didi

rust - 如何在 Rust 中使用 prost 生成代码?

转载 作者:行者123 更新时间:2023-11-29 08:07:03 32 4
gpt4 key购买 nike

我不知道如何使用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 下可用的内容结构。

将文件驻留在构建目录中是有意义的,因为它们是构建工件。在你的 crate 的 src 文件夹中生成代码会导致困惑,无论是在版本控制还是项目完整性方面(你会有重复的信息和 protobuf 实现,前提是它是理智,对你来说不是重要的。但是,功能蓝图才是)。

关于rust - 如何在 Rust 中使用 prost 生成代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58040435/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com