gpt4 book ai didi

rust - 在 rust 中使用 prost 和 tonic 时如何导入 .proto?

转载 作者:行者123 更新时间:2023-12-03 11:30:00 31 4
gpt4 key购买 nike

我正在尝试使用 crates prost 和 tonic 在 rust 中构建一个简单的 gRPC 客户端。我的原型(prototype)定义非常简单,但我突然坚持使用从其他原型(prototype)导入的消息。

// file src/protos/types.proto
syntax = "proto3";
package Types;

message Message1 {
uint32 value1 = 1;
bytes value2 = 2;
}

message Message2 {
uint32 value1 = 1;
uint32 value2 = 2;
uint32 value3 = 3;
uint32 value4 = 4;
}
// file src/protos/service.proto
syntax = "proto3";
import "types.proto";
package Service;

service Worker {
rpc Do (Request) returns (Reply);
}

message Request {
Types.Message1 message1 = 1;
Types.Message2 message2 = 2;
}

message Reply {
bool success = 1;
}

我的 build.rs非常简单:
fn main() -> Result<(), Box<dyn std::error::Error>> {
tonic_build::compile_protos("src/protos/types.proto")?;
tonic_build::compile_protos("src/protos/service.proto")?;
Ok(())
}

当我在 main.rs 中包含 protos 时,问题就开始了:
pub mod service {
tonic::include_proto!("types");
tonic::include_proto!("service");
}

编译失败并出现以下错误:
 --> D:\temp\rust-proto\target\debug\build\rust-proto-11c38604fbc7ce30\out/service.rs:4:48     
|
4 | pub message1: ::std::option::Option<super::types::Message1>,
| ^^^^^ maybe a missing crate `types`?

这里可能有什么问题?!我将我的游乐场项目上传到 github以防它可能有用。

最佳答案

我对 tonic 了解不多,但是您必须将包含在与其 proto 包相对应的模块中,例如:

pub mod types {
tonic::include_proto!("types");
}
pub mod service {
tonic::include_proto!("service");
}

fn main() {
let msg = types::Message1::default();
println!("Hello, world! {:?}", msg);
}

这编译正确。

顺便说一句,您可以在此处的设置中的以下位置检查生成的 rust 代码:
D:\temp\rust-proto\target\debug\build\rust-proto-11c38604fbc7ce30\out

关于rust - 在 rust 中使用 prost 和 tonic 时如何导入 .proto?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61547334/

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