私はGoogleprotobufを使おうとしていますが、次の説明があります。
message.protoファイル:
message Request {
required int32 id = 1;
optional string value = 2;
}
service.protoファイル:
import "message.proto";
service Service {
rpc request (Request) returns (bool);
}
C++ソースを生成しようとしていますが、エラーが発生します:
$ protoc service.proto --cpp_out =/tmp/proto/build
service.proto:4:40:予期されるメッセージタイプ。
ユーザー定義の型のみを返す必要がありますか?プリミティブ(bool
やstring
など)はサポートされていますか? (私の例ではRequest
の代わりに)プリミティブ型をサービスメソッドの引数として使用できますか?
いいえ、プリミティブ型を要求または応答として使用することはできません。メッセージタイプを使用する必要があります。
新しいパラメータを追加したり、追加のデータを返したりする場合に備えて、メッセージタイプは後で拡張できるため、これは重要です。
プリミティブ型を返したい場合は、それをmessage
でラップして、次のように返します。
message Name {
string name = 1;
}
何も返したくない場合は、void
つまり、空のメッセージを作成するだけです。
message Void {}
message Name {
string name = 1;
}
..
service MyService{
rpc MyFunc(Name) returns (Void);
}