Может ли метод службы protobuf возвращать примитивный тип?

Я пытаюсь использовать Google protobuf, и у меня есть следующие описания:

сообщение.прото!-Файл -9-->:

message Request {
   required int32 id = 1;
   optional string value = 2;
}

сервис.прото!-Файл -9-->:

import "message.proto";

service Service {
    rpc request (Request) returns (bool);
}

Я пытаюсь создать источники c++ и получить сообщение об ошибке:

сервис$ protoc.proto --cpp_out=/tmp/proto / build

сервис.proto: 4: 40: ожидаемый тип сообщения.

должен ли я возвращать пользовательские типы только? Примитивны (как bool или string) поддержал? Могу ли я использовать примитивные типы в качестве аргумента метода службы (вместо Request в моем примере)?

2 ответов


нет, вы не можете использовать примитивный тип в качестве запроса или ответа. Необходимо использовать тип сообщения.

Это важно, потому что тип сообщения может быть расширен позже, если вы решите добавить новый параметр или вернуть некоторые дополнительные данные.


если вы хотите вернуть примитивный тип, оберните его в message и вернуть его:

message Name {
  string name = 1;
}

в случае, если вы не хотите ничего возвращать, void Я имею в виду, вы можете просто создать пустой сообщение:

message Void {} 

message Name {
  string name = 1;
}

..
service MyService{
  rpc MyFunc(Name) returns (Void);
}