Как импортировать .proto при работе с прост и тони c в ржавчине? - PullRequest
1 голос
/ 01 мая 2020

Я пытаюсь построить простой клиент 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 на случай, если он будет полезен.

1 Ответ

1 голос
/ 02 мая 2020

Я не знаю много о toni c, но вы должны поместить включения в модули, соответствующие их протопакетам, например:

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);
}

Это компилируется правильно.

Кстати, вы можете проверить сгенерированный код ржавчины в следующем месте в вашей настройке здесь:

D:\temp\rust-proto\target\debug\build\rust-proto-11c38604fbc7ce30\out
...