Search code examples
pythonprotocol-buffersgrpcprotogrpc-python

proto3 grpc clients: can they all omit sending message fields?


Given the following proto definition Can all autogenerated grpc clients produced by google code generation omit sending fields in PagingInfo?

In the python client, I can omit sending that field by using code like:

request = SearchRequest(paging_info=dict(a=OptionalField(d='d', e='e')), query='blah') 

grpc proto definition:

syntax = "proto3";

message OptionalField {
  string d = 1;
  string e = 2;
}

message PagingInfo {
  OptionalField a = 1;
  OptionalField b = 2;
  OptionalField c = 3;
}

message SearchRequest {
  string query = 1;
  PagingInfo paging_info = 2;
}

message SearchResponse {
  string a = 1;
}

service SearchService {
    rpc Search (SearchRequest) returns (SearchResponse);
}

Solution

  • In proto3, all elements are considered optional (in the proto2 sense), so yes: any compliant implementation should be able to send a message that omits that element.