protobuf typeに値が入っているか確認するにはgoogle/protobuf/wrappers.protoをつかうとよい
今回のエントリも前回に続きprotobufの数あるtypeの中から1つの使い方まとめていきたい。今回は google/protobuf/wrappers.proto
をまとめていく。
protobufのtypeのなかにはプリミティブなtypeとしてstring
やuint32
, uint64
などが用意されている。プリミティブなtypeをリクエストに定義した場合、リクエストに値を定義しないとデフォルト値がセットされる。
Language Guide (proto3) | Protocol Buffers | Google Developers
gRPC Clientが明示的に値をセットしないとuint32
では0
値をgRPC Serverで受け取ることになる。
次のようなリクエストにつかうprotoを定義するケースを考えていく。
|
|
gRPC Clientからは page
に値がセットされていなければpage
の値を10にServer側でセットするとしよう。
|
|
UInt32Value.getDefaultInstance().value
からuint32のデフォルト値をとることで判定をしている。page
のケースであればこれでも良いかもしれないが、デフォルト値の0
でも良いケースではデフォルト値判定をする必要がなくなるし、Patch
のようなリクエストメソッドを提供したい場合などはprotoに定義したフィールドに値がセットされたのかどうかを素直に判定したい。
そのようなケースに有効なprotobufのtypeにgoogle/protobuf/wrappers.proto
が用意されている。
protobuf typeに値が入っているか確認できるwrappers.proto
wrappers.protoはプリミティブなtypeに対応している。
protoの定義は次のように書ける
|
|
値がセットされているかどうかもhasFiledName()
の関数が用意されている。
|
|
wrappers.protoのUInt32Value
とプリミティブなuint32
を使い分けることでgRPC Clientのリクエストパラメータをオプションか必須であるか明示的に定義することができる。
コード
コードは次のレポジトリにコミットしてあります。