Я пытаюсь построить простой клиент gRP C в ржавчине, используя ящики прост и тони c. Мои прото определения довольно просты, но я неожиданно застрял с использованием сообщений, импортированных из других прото.
// 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
:
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 на случай, если он будет полезен.