Error when using oneof name in response body selector
#1,264 opened on May 1, 2020
Description
As asked from my question in #585 I'm filing a new bug here.
I'm trying to have the response_body in the HTTP options use the oneof field, so that we can have alternate schemas in the response. However, this causes an error. Here is a minimal proto:
syntax = "proto3";
package services;
option go_package = "services;services";
import "google/api/annotations.proto";
service HostService {
// This retrieves the host specified in the request using the basic view.
rpc GetHost(GetHostRequest) returns (GetHostResponse) {
option (google.api.http) = {
get: "/hosts/{id}"
response_body: "item"
};
}
}
message HostA {
string foo = 1;
}
message HostB {
string bar = 1;
}
message GetHostRequest {
string id = 1;
}
message GetHostResponse {
oneof item {
HostA a = 1;
HostB b = 2;
}
}
Here is tree output:
.
├── gen
│ └── service
└── service
├── service.proto
└── third_party
├── google
│ └── api
│ ├── annotations.proto
│ ├── http.proto
│ └── httpbody.proto
└── protoc-gen-swagger
└── options
├── annotations.proto
└── openapiv2.proto
And here is my invocation:
protoc -I. -I service/third_party --go_out=plugins=grpc,paths=source_relative:./gen --grpc-gateway_out=logtostderr=true,paths=source_relative:./gen service/service.proto
When I run the command I get:
--grpc-gateway_out: no field "item" found in GetHostResponse
Note that if I change the response body def to select either "a" or "b" -- not actually what I want, but just to try it out -- I get a different error (which I think is already captured in a different ticket):
--grpc-gateway_out: 224:9: expected operand, found 'if'